Найти индексы всех совпадений регулярных выражений? - PullRequest
53 голосов
/ 19 августа 2010

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

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

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

1 Ответ

120 голосов
/ 19 августа 2010

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

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

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

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

1012 *, например *

[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...