Python regex-игнорировать скобки как индексирование?
в настоящее время я написал шаблон регулярного выражения nooby, который включает чрезмерное использование символов "(" и")", но я использую их для операторов "или", таких как (A|B|C), что означает A или B или C.
мне нужно найти каждое совпадение шаблона в строке.
Попытка использовать re.findall(pattern, text)
метод не годится, поскольку он интерпретирует символы скобок как индексирующие означающие (или любой правильный жаргон), и поэтому каждый элемент созданного списка не является строкой, показывающей сопоставленные текстовые разделы, но вместо этого Кортеж (которые содержат очень уродливые фрагменты совпадения шаблонов).
есть ли аргумент, который я могу передать findall
игнорировать paranthesis как индексация?
Или мне придется использовать очень уродливую комбинацию re.search
и re.sub
(это единственное решение, которое я могу придумать; найти индекс re.поиск, добавить соответствующий раздел текста в список, а затем удалить его из исходной строки {с помощью ugly index tricks}, продолжая это до тех пор, пока не закончатся спички. Очевидно, это ужасно и нежелательно).
спасибо!
2 ответов
да, добавьте ?:
к группе, чтобы сделать его не-захвата.
import re
print re.findall('(.(foo))', "Xfoo") # [('Xfoo', 'foo')]
print re.findall('(.(?:foo))', "Xfoo") # ['Xfoo']
посмотреть синтаксис re для получения дополнительной информации.