-4

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

4

2 回答 2

5

修改器是贪婪的*,如果你允许它,它会匹配它可以匹配的最大值。! TH如果您的输入文本中出现多次,.*则将匹配所有内容,直到最后一次出现。

改为使用*?来关闭贪婪匹配;.*?将匹配最小字符数:

>>> 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'
于 2013-02-26T14:45:03.227 回答
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)
于 2013-02-26T17:12:13.767 回答