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

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

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

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

58
задан martineau 14 November 2018 в 22:49
поделиться

1 ответ

Это то, что вам нужно: ( источник )

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

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

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

например.

[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]
129
ответ дан 24 November 2019 в 18:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: