Python Regex - как получить позиции и значения совпадений



как я могу получить начальную и конечную позиции всех матчей с помощью re модуль? Например, учитывая шаблон r'[a-z]' и в строке 'a1b2c3d4' Я хотел бы получить позиции, где он находит каждую букву. В идеале, я бы тоже хотел вернуть текст матча.

602   3  

3 ответов:

import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
    print m.start(), m.group()

принято от

регулярное выражение HOWTO

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

    Ничего не найдено.