Регулярное выражение Python находит все перекрывающиеся совпадения?
Я пытаюсь найти каждую 10-значную серию чисел в большей серии чисел, используя re в Python 2.6.
Я легко могу захватить не перекрывающиеся матчи, но я хочу, чтобы каждый матч в серии чисел. Например.
в "123456789123456789"
Я должен получить следующий список:
[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]
Я нашел ссылки на" lookahead", но примеры, которые я видел, показывают только пары чисел, а не большие группы, и я не был возможность конвертировать их за пределами двух цифр.
3 ответа:
используйте группу захвата внутри lookahead. Lookahead захватывает текст, который вас интересует, но фактическое совпадение технически является подстрокой нулевой ширины перед lookahead, поэтому совпадения технически не перекрываются:
import re s = "123456789123456789" matches = re.finditer(r'(?=(\d{10}))',s) results = [int(match.group(1)) for match in matches] # results: # [1234567891, # 2345678912, # 3456789123, # 4567891234, # 5678912345, # 6789123456, # 7891234567, # 8912345678, # 9123456789]
вы также можете попробовать использовать третьих лиц
regex
модуль (неre
), который поддерживает перекрывающиеся матчей.>>> import regex as re >>> s = "123456789123456789" >>> matches = re.findall(r'\d{10}', s, overlapped=True) >>> for match in matches: print match ... 1234567891 2345678912 3456789123 4567891234 5678912345 6789123456 7891234567 8912345678 9123456789