Найти индексы всех совпадений регулярных выражений в Python?
Я разбираю строки, которые могут содержать в себе любое количество цитируемых строк (я разбираю код и пытаюсь избежать PLY). Я хочу узнать, цитируется ли подстрока, и у меня есть индекс подстрок. Моя первоначальная мысль заключалась в том, чтобы использовать re, чтобы найти все совпадения, а затем выяснить диапазон индексов, которые они представляют.
Кажется, я должен использовать re с регулярным выражением, например \"[^\"]+\"|'[^']+'
(я избегаю иметь дело с тройным цитированием и такими строками на данный момент). Когда я использую findall(), я получаю список подходящих строк, что несколько приятно, но мне нужны индексы.
Моя подстрока может быть такой же простой, как c
, и мне нужно выяснить, действительно ли этот конкретный c
или нет.
Спасибо заранее.
Ответы
Ответ 1
Это то, что вы хотите: (источник)
re.finditer(pattern, string[, flags])
Возвращает итератор, выводящий экземпляры MatchObject поверх всех неперекрывающиеся совпадения для шаблона RE в строке. Строка отсканированные слева направо, а совпадения возвращаются в найденном порядке. пустой совпадения включаются в результат, если они не касаются начала другое совпадение.
Затем вы можете получить начальную и конечную позиции из объектов MatchObjects.
например.
[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]