Найти - Пользователи
Полная версия: вопрос по регулярке
Начало » Python для новичков » вопрос по регулярке
1
MarkHammer
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 ?
dimy44
findall вообщето список возвращает
import re
s = 'bm61ajgNBM61CABNJM' 
r = re.findall(r'(61.+?)N', s)
for i in r:
    print i
>>>
61ajg
61CAB
>>>
Isem
Воспользуйтесь функцией поиска.
MarkHammer
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

я так понимаю что скобку надо каким-то образом экранировать даже в неформатированной строке ???
smoke853
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']
dimy44
да, скобки это управляющие символы и экранируются бэкслэшем, если их нужно читать как есть.
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']
>>>
MarkHammer
smoke853
к сожалению так тоже не выйдет - так как надо находить только айпишники следующие после 61)
в тексте имеются айпишники следующие после к примеру 54…
надо каким-то образом решить проблему со скобкой после 61 …
кто может - помогите плиз…
MarkHammer
dimy44
да, скобки это управляющие символы и экранируются бэкслэшем, если их нужно читать как есть.

Спасибо !!! - так работает…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB