Уведомления

Группа в Telegram: @pythonsu

#1 Март 9, 2018 17:23:05

Florenzo
Зарегистрирован: 2013-06-05
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

детский вопрос по re

учу регулярки:

 >>>
>>> import re
>>> text2 = "John will be out from 25.02.2018 till 10.3.2018"
>>> datepattern2 = re.compile('\d+.\d+.\d+')
>>> for z3 in datepattern2.finditer(text2):
...          print(z3.group())
...
25.02.2018
10.3.2018
======================
так дает обе даты - все хорошо
и если в группах, т.е.
re.compile('(\d+).(\d+).(\d+)')
, то тоже дает

 >>>
>>> datepattern3 = re.compile('([0-9]).([0-9]).([0-9])')
>>> for z3 in datepattern3.finditer(text2):
...          print(z3.group())
...
2.201
0.3.2
======================

а так почему-то обрезает, почему???

 >>>
>>> datepattern3 = re.compile('([0-9]{2}).([0-9]{2}).([0-9]{4})')
>>> for z3 in datepattern3.finditer(text2):
...          print(z3.group())
...
25.02.2018
======================
>>> datepattern3 = re.compile('[0-9]{2}.[0-9]{2}.[0-9]{4}')
>>> for z3 in datepattern3.finditer(text2):
...          print(z3.group())
...
25.02.2018
=======================
а так дает только 1-ю дату, но почему не дает 2-ю дату???

(python 3.6.4 (x64), win7 (x64))

Отредактировано Florenzo (Март 9, 2018 17:24:11)

Офлайн

#2 Март 9, 2018 18:19:35

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

детский вопрос по re

Здесь ищешь только один символ в группе

 datepattern3 = re.compile(r'([0-9]+).([0-9]+).([0-9]+)')
for z3 in datepattern3.finditer(text2):
    print(z3.group())

Здесь задал жестко количество {2}
 datepattern3 = re.compile('([0-9]{2}).([0-9]{1,2}).([0-9]{4})')
for z3 in datepattern3.finditer(text2):
    print(z3.group())
datepattern3 = re.compile('[0-9]{2}.[0-9]{1,2}.[0-9]{4}')
for z3 in datepattern3.finditer(text2):
    print(z3.group())

Офлайн

#3 Март 10, 2018 00:24:51

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

детский вопрос по re

Florenzo
так дает обе даты - все хорошо
Точка означает любой символ всегда. Точка совпадёт как с точкой, так и с цифрой, так и с буквой.
  
>>> import re
>>> 
>>> re.findall(r'\d.\d', 'abc 123 def 4a5 ghi 6.7 jkl')
['123', '4a5', '6.7']
>>>
Чтобы точку из метасимвола превратить в простой символ, её надо проэкранировать.
  
>>> import re
>>> 
>>> re.findall(r'\d\.\d', 'abc 123 def 4a5 ghi 6.7 jkl')
['6.7']
>>>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version