Извлечение содержимого между регулярным выражением Python? - PullRequest
0 голосов
/ 23 октября 2011

Есть ли простой метод для извлечения содержимого между регулярными выражениями? Предположим, у меня есть следующий образец текста

 SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT

Мое регулярное выражение:

 compiledRegex = re.compile('\[.*\] value=("|\').*("|\')')

Это, очевидно, вернет все значение [SOME MORE TEXT] = "ssss", однако я хочу, чтобы возвращался только ssss, поскольку это то, что я ищу

Я, очевидно, могу определить функцию синтаксического анализатора, но мне кажется, что Python предоставляет какой-то простой способ Python для выполнения такой задачи

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Это то, для чего предназначены группы захвата.

compiledRegex = re.compile('\[.*\] value=(?:"|\')(.*)(?:"|\')') 
matches = compiledRegex.match(sampleText)
capturedGroup = matches.group(1) # grab contents of first group

?: внутри старых групп (круглые скобки) означает, что группа теперь не захватывает группа;то есть он не будет доступен как группа в результате.Я преобразовал их, чтобы упростить вывод, но вы можете оставить их в качестве групп захвата, если хотите (но тогда вам придется использовать matches.group(2) вместо этого, поскольку первая цитата будет первой захваченной группой).

0 голосов
/ 23 октября 2011

Ваше оригинальное регулярное выражение слишком жадное: r'.*\]' не остановится на первом ']', а второе '.*' не остановится на '"'. Чтобы остановиться на c, вы можете использовать [^c] или '.*?':

regex = re.compile(r"""\[[^]]*\] value=("|')(.*?)\1""") 

Пример

m = regex.search("""SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT""")
print m.group(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...