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

Python 正则表达式与预期行不匹配,python,regex,Python,Regex,我使用regexfault filtertime 5(.*)!TH匹配故障过滤器时间5和之间的所有内容!TH。然而,由于某些原因,这不起作用。你知道为什么吗?这个*修饰符是贪婪的,如果你允许的话,它将匹配它能匹配的最大值。如果出现多个!在输入文本中,*将匹配到上次出现的所有内容 使用*?来关闭贪婪匹配*?将与最小字符数匹配: >>> import re >>> re.search('fault-filtertime 5(.*)! TH', 'fault-fil

我使用regex
fault filtertime 5(.*)!TH
匹配故障过滤器时间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'

如果有多行数据或包含其他控制字符,则需要使用
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)

请提供详情。输入,预期输出,什么“不起作用”?我们都可以在这里猜测,但是有了更多的信息,我们可以给你一个更明确的答案。使用
fault filtertime 5(.*)!TH
我真的不明白这里的反对票。。是不是因为我没有提供“细节”?@Cemre:很可能是的。“出于某种原因,这不起作用”一词非常模糊。事情可能有数百万种不起作用的方式,您需要定义在这种情况下这意味着什么。自己回答以下问题:如果它真的起作用,它会是什么样子?它看起来是什么样子?@Cemre:现在你有了下面的第二个答案,这对可能的错误进行了不同的猜测。