Форум сайта python.su
Во всех известных мне справочниках по регекспам написано, что
“…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')] >>>
Офлайн
Самый простой вариант который приходит на ум:
>>> 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' >>>
Офлайн
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']
Офлайн