Использование регулярных выражений для извлечения подстрок

#python #regex

Вопрос:

У меня есть веревочка:

 s = r'"url" : "a", "meta": "b", "url" : "c"'  

Что я хочу , так это записать подстроку url: ... до , , так что ожидаемый результат-это список:

 [r'"url" : "a"', r'"url" : "b"']  

Я использую:

 re.findall(r'("url"):(.*),', s)  

но все, что он делает, — это возвращает всю строку целиком. Есть ли что-то, что я делаю не так?

Ответ №1:

Ваше последнее «,» было сопоставлено из-за жадного поиска, (.*?) не является жадным. Кроме того, последняя запятая необязательна, поэтому ее следует игнорировать, если она отсутствует

 import re  s = r'"url":"a","meta":"b","url":"c"'  print(re.findall(r'("url"):"(.*?)",?', s))  

Ответ №2:

Вы должны избегать , , чтобы избежать включения запятой внутри группы. Попробуй это:

 re.findall(r'(("url" :[^,]*),*)', s)