Python Regex - как получить позиции и значения совпадений
как я могу получить начальную и конечную позиции всех матчей с помощью re модуль? Например, учитывая шаблон r'[a-z]' и в строке 'a1b2c3d4' Я хотел бы получить позиции, где он находит каждую букву. В идеале, я бы тоже хотел вернуть текст матча.
3 ответов:
принято от
span () возвращает начальный и конечный индексы в одном кортеже. Поскольку метод match проверяет только совпадение RE в начале строки, start () всегда будет равен нулю. Однако метод поиска RegexObject экземпляры сканируются через строку, поэтому совпадение может не начинаться с нуля в таком случае.
>>> p = re.compile('[a-z]+') >>> print p.match('::: message') None >>> m = p.search('::: message') ; print m <re.MatchObject instance at 80c9650> >>> m.group() 'message' >>> m.span() (4, 11)объединить, что с:
в Python 2.2 также доступен метод finditer (), возвращающий последовательность экземпляров MatchObject в качестве итератора.
>>> p = re.compile( ... ) >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') >>> iterator <callable-iterator object at 0x401833ac> >>> for match in iterator: ... print match.span() ... (0, 2) (22, 24) (29, 31)вы должны быть в состоянии сделать что-то вроде
for match in re.finditer(r'[a-z]', 'a1b2c3d4'): print match.span()
Для Python 3.x
from re import finditer for match in finditer("pattern", "string"): print(match.span(), match.group())Вы получаете
\nразделенные кортежи (содержащие первый и последний индексы совпадения соответственно) и само совпадение для каждого попадания в строку.
Comments