2014-10-17 82 views
0

PLS考虑以下之间的一切之间捕获:(这被存储在可变的运算)正则表达式到2个词语

>>> print op 
sho run int lo0 | sec mtu 
ip mtu 800 
R4# 

我需要捕捉一切后“秒MTU”开始之前“#”

所以我试图

str=re.search(r'(\bsec\smtu)(\n.*){2}',op,re.M|re.I) 
print str.group(1) 

但是它产生一个错误

请提出替代方案

回答

1

两个选项:

>>> s = '''sho run int lo0 | sec mtu 
... ip mtu 800 
... R4#''' 
>>> re.findall('sec mtu(.*)#', s, re.DOTALL)[0] 
'\n ip mtu 800\nR4' 
>>> s[s.find('sec mtu')+7:s.find('#')] 
'\n ip mtu 800\nR4' 
0

你可以用多修饰也。

>>> re.findall('sec mtu([^#]*)#', op, re.M)[0] 
'\n ip mtu 800\nR4' 
>>> m = re.findall('sec mtu([^#]*)#', op, re.M)[0] 
>>> print m 

ip mtu 800 
R4 
>>> re.search(r'(?:\bsec\smtu)([^#]*)',op, re.M|re.I).group(1) 
'\n ip mtu 800\nR4'