Уведомления

Группа в Telegram: @pythonsu

#1 Март 7, 2013 22:18:47

MarkHammer
Зарегистрирован: 2013-02-24
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по регулярке

stroka_IP = str(re.findall (r'61)(+)',ddd))
подскажите - ругается на это регулярное выражение :
Traceback (most recent call last):
File “CPython33/IPver5.py”, line 37, in <module>
stroka_IP = str(re.findall (r'61)(+)',ddd))
File “C:\Python33\lib\re.py”, line 201, in findall
return _compile(pattern, flags).findall(string)
File “C:\Python33\lib\functools.py”, line 258, in wrapper
result = user_function(*args, **kwds)
File “C:\Python33\lib\re.py”, line 274, in _compile
return sre_compile.compile(pattern, flags)
File “C:\Python33\lib\sre_compile.py”, line 493, in compile
p = sre_parse.parse(p, flags)
File “C:\Python33\lib\sre_parse.py”, line 729, in parse
raise error(“unbalanced parenthesis”)
sre_constants.error: unbalanced parenthesis

каким образом тогда мне найти в тексте подстроку 61) и все что следует за ней до буквы N ?

Отредактировано MarkHammer (Март 7, 2013 22:19:37)

Офлайн

#2 Март 7, 2013 22:40:57

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

вопрос по регулярке

findall вообщето список возвращает

import re
s = 'bm61ajgNBM61CABNJM' 
r = re.findall(r'(61.+?)N', s)
for i in r:
    print i
>>>
61ajg
61CAB
>>>

Офлайн

#3 Март 7, 2013 22:41:26

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

вопрос по регулярке

Воспользуйтесь функцией поиска.



Офлайн

#4 Март 7, 2013 23:22:18

MarkHammer
Зарегистрирован: 2013-02-24
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по регулярке

dimy44
findall вообщето список возвращает

мне список и нужен, проблема именно в скобке после 61…

т.е. к примеру из текста

61)172.24.3.1Nfalkj;ljk;ljgadfkal;61;lkaj;fNl;kj;lajkga61)172.23.2.2Nkjl;ajg;l
надо выбрать
172.24.3.1
172.23.2.2
если в регулярном выражении не указывать скобку после 61 - то все работает, но находится еще и подстрока после 61 без скобки…, а если в регулярке ввести скобку - то ругается :
Traceback (most recent call last):
File “CPython33/IPver5.py”, line 37, in <module>
stroka_IP = str(re.findall (r'61)(+)',ddd))
File “C:\Python33\lib\re.py”, line 201, in findall
return _compile(pattern, flags).findall(string)
File “C:\Python33\lib\functools.py”, line 258, in wrapper
result = user_function(*args, **kwds)
File “C:\Python33\lib\re.py”, line 274, in _compile
return sre_compile.compile(pattern, flags)
File “C:\Python33\lib\sre_compile.py”, line 493, in compile
p = sre_parse.parse(p, flags)
File “C:\Python33\lib\sre_parse.py”, line 729, in parse
raise error(“unbalanced parenthesis”)
sre_constants.error: unbalanced parenthesis

я так понимаю что скобку надо каким-то образом экранировать даже в неформатированной строке ???

Офлайн

#5 Март 7, 2013 23:52:00

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

вопрос по регулярке

import re
s = '61)172.24.3.1Nfalkj;ljk;ljgadfkal;61;lkaj;fNl;kj;lajkga61)172.23.2' \
    '.2Nkjl;ajg;l'
print(re.findall(r'\d+\.\d+\.\d+\.\d+', s))
#Ответ: ['172.24.3.1', '172.23.2.2']

Офлайн

#6 Март 8, 2013 00:02:06

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

вопрос по регулярке

да, скобки это управляющие символы и экранируются бэкслэшем, если их нужно читать как есть.

import re
s = '61)172.24.3.1Nfalkj;ljk;ljgadfkal;61;lkaj;fNl;kj;lajkga61)172.23.2.2Nkjl;ajg;l'
r = re.findall(r'61\)([\d\.]+)N', s)
print(r)
>>>
['172.24.3.1', '172.23.2.2']
>>>

Офлайн

#7 Март 8, 2013 00:02:50

MarkHammer
Зарегистрирован: 2013-02-24
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по регулярке

smoke853
к сожалению так тоже не выйдет - так как надо находить только айпишники следующие после 61)
в тексте имеются айпишники следующие после к примеру 54…
надо каким-то образом решить проблему со скобкой после 61 …
кто может - помогите плиз…

Офлайн

#8 Март 8, 2013 00:07:48

MarkHammer
Зарегистрирован: 2013-02-24
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по регулярке

dimy44
да, скобки это управляющие символы и экранируются бэкслэшем, если их нужно читать как есть.

Спасибо !!! - так работает…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version