Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2012 18:27:14

igorakintev
Зарегистрирован: 2012-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Прошу помощи в составлении и так задача проверить на идентичность строку 4 цифры пробел/ы 6 цифр. Составил что-то типа

txt='1909 112233'

re1='(\\d{4})' # Integer Number 1
re2='(\\s+)' # White Space 1
re3='(\\d+)' # Integer Number 2

rg = re.compile(re1+re2+re3,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
int1=m.group(1)
ws1=m.group(2)
int2=m.group(3)
print “(”+int1+“)”+“(”+ws1+“)”+“(”+int2+“)”+“\n”

но работает не так как нужно прокатывают варианты с большим и меньшим количеством цифр

Офлайн

#2 Сен. 13, 2012 19:30:18

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

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

import re
txt='1909 112233'
for i in re.findall(r"\d{4}\s+\d{6}", txt): print i

#1909 112233

Так что ли?



Офлайн

#3 Сен. 13, 2012 21:00:18

igorakintev
Зарегистрирован: 2012-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Mozart
import re
txt='1909 112233'
for i in re.findall(r"\d{4}\s+\d{6}", txt): print i

#1909 112233

Так что ли?
если будет передана строка txt='19093 112233'
то все равно вернет результат, надо именно 4 символа пробл\ы 6 символов

Офлайн

#4 Сен. 13, 2012 21:13:13

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

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

for i in re.findall(r"^\d{4}\s+\d{6}$", txt): print i

Вернет результат, только если будет найдено точное вхождение.



Офлайн

#5 Сен. 13, 2012 21:16:52

igorakintev
Зарегистрирован: 2012-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Mozart
for i in re.findall(r"^\d{4}\s+\d{6}$", txt): print i

Вернет результат, только если будет найдено точное вхождение.
а как сделать так чтобы было точное совпадение ни символом больше, т.к это проверка документа, и 5 цифр в серии не должно быть, ну вы понимаете.


п.с. Туплю, видимо не правильно протестил, ваш, пошел читать мануалы сделал то же самое что и вы….))
Все ок работает, Спасибо огромное за помощь!.

Отредактировано igorakintev (Сен. 13, 2012 21:24:21)

Офлайн

#6 Сен. 13, 2012 21:23:47

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

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

txt = ['1909    112233', '34354 33432432434', '3434 223456']

for i in txt:
if re.findall(r"^\d{4}\s+\d{6}$", i): print i

# 1909 112233
# 3434 223456

Все работает как нужно вроде



Офлайн

#7 Сен. 14, 2012 03:21:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

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

findall() там не подходит (режим не многострочный)

>>> import re
>>> 
>>> n4sn6 = re.compile(r'^\d{4}\s+\d{6}$')
>>> 
>>> lst = ['1909    112233', '34354 33432432434', '3434 223456']
>>> 
>>> valid = filter(n4sn6.match, lst)
>>> print(list(valid))
['1909    112233', '3434 223456']
>>>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version