Уведомления

Группа в Telegram: @pythonsu

#1 Июль 23, 2007 17:44:31

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения findall()

Во всех известных мне справочниках по регекспам написано, что

“…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')]
>>> 



Офлайн

#2 Июль 23, 2007 19:49:43

xonix
От:
Зарегистрирован: 2006-12-31
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения findall()

Самый простой вариант который приходит на ум:

>>> 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'
>>> 



Офлайн

#3 Июль 24, 2007 11:35:26

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения findall()

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']



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version