Подтвердить что ты не робот

Найти индексы всех совпадений регулярных выражений в Python?

Я разбираю строки, которые могут содержать в себе любое количество цитируемых строк (я разбираю код и пытаюсь избежать PLY). Я хочу узнать, цитируется ли подстрока, и у меня есть индекс подстрок. Моя первоначальная мысль заключалась в том, чтобы использовать re, чтобы найти все совпадения, а затем выяснить диапазон индексов, которые они представляют.

Кажется, я должен использовать re с регулярным выражением, например \"[^\"]+\"|'[^']+' (я избегаю иметь дело с тройным цитированием и такими строками на данный момент). Когда я использую findall(), я получаю список подходящих строк, что несколько приятно, но мне нужны индексы.

Моя подстрока может быть такой же простой, как c, и мне нужно выяснить, действительно ли этот конкретный c или нет.

Спасибо заранее.

4b9b3361

Ответ 1

Это то, что вы хотите: (источник)

re.finditer(pattern, string[, flags]) 

Возвращает итератор, выводящий экземпляры MatchObject поверх всех неперекрывающиеся совпадения для шаблона RE в строке. Строка отсканированные слева направо, а совпадения возвращаются в найденном порядке. пустой совпадения включаются в результат, если они не касаются начала другое совпадение.

Затем вы можете получить начальную и конечную позиции из объектов MatchObjects.

например.

[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]