python中的正则表达式,用于捕获2个单词之间的所有内容

时间:2014-10-17 07:02:00

标签: python regex

请考虑以下事项:(这存储在变量op中)

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

我需要捕捉“sec mtu”之后和“#”

之前的所有内容

所以我试过

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

然而它会产生错误

请提出替代方案

4 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

(?<=\bsec\smtu\n)(.*?)(?=#)

试试这个。使用re.DOTALL。参见演示。

http://regex101.com/r/dZ1vT6/54

答案 2 :(得分: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'

答案 3 :(得分:0)

尝试这个也会严格捕捉。

(sec\smtu)(?:(?!(\#|\1)).)*\#

这个正则表达式将完全捕获您想要的内容。

参见DEMO:http://regex101.com/r/qL0mZ1/1