正则表达式与预期的行不匹配

时间:2013-02-26 14:41:40

标签: python regex

我使用正则表达式fault-filtertime 5(.*)! TH来匹配fault-filtertime 5! TH之间的所有内容。然而,由于某种原因,这不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

*修饰符是贪婪的,如果你允许,它将匹配它可以匹配的最大值。如果您的输入文字中出现多次! TH,则.*将匹配 last 出现的所有内容。

使用*?代替关闭贪心匹配; .*?将匹配最小字符数:

>>> import re
>>> re.search('fault-filtertime 5(.*)! TH', 'fault-filtertime 5 foo bar baz! TH fault-filtertime 5 spam ham eggs! TH').group(1)
' foo bar baz! TH fault-filtertime 5 spam ham eggs'
>>> re.search('fault-filtertime 5(.*?)! TH', 'fault-filtertime 5 foo bar baz! TH fault-filtertime 5 spam ham eggs! TH').group(1)
' foo bar baz'

答案 1 :(得分:1)

如果您有多行数据或包含其他控制字符,则需要使用re.DOTALL,如下所示:

import re

data = """
fault-filtertime 5
foo
bar
baz
! TH
"""

regex_str = "fault-filtertime 5(.*?)! TH"
regex = re.compile(regex_str, re.DOTALL)
result = re.search(regex, data)
print result.group(1)