Найти - Пользователи
Полная версия: Регулярные выражения findall()
Начало » Python для экспертов » Регулярные выражения findall()
1
Yurietc
Во всех известных мне справочниках по регекспам написано, что
“…findall(s) Ищет все неперекрывающиеся подстроки s, удовлетворяющие шаблону…”
Но это правда только если в регекспе не заданы группы. Если группы есть, findall() возвращает только значение групп.
Посоветуйте, как организовать поиск всего, что удовлетворяет шаблону ?

import re
>>> ob1 = re.compile('111')
>>> ob2 = re.compile('(1)1(1)')
>>> st = '111222111222111'
>>> fi1 = ob1.findall(st)
>>> fi1
['111', '111', '111']
>>> fi2 = ob2.findall(st)
>>> fi2
[('1', '1'), ('1', '1'), ('1', '1')]
>>> 
xonix
Самый простой вариант который приходит на ум:

>>> import re
>>> r1 = re.compile(r'(1)1(1)')
>>> s = '11121111221111111222111'
>>> def f(mo):
	print mo.group(), mo.start(), mo.end()
>>> r1.sub(f, s)
111 0 3
111 4 7
111 10 13
111 13 16
111 20 23
'21221222'
>>> 
Yurietc
xonix, спасибо - натолкнул на мысль :

import re
>>> r1 = re.compile(r'(1)1(1)')
>>> s = '111q111w111e111r'
>>> q = []
>>> for search in r1.finditer(s):
	q.append(search.group())
	
>>> q
['111', '111', '111', '111']
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB