假设我想在字符串中查找 "PATTERN"
,其中 "PATTERN"
可以是字符串中的任何位置。我的第一次尝试是 *PATTERN*
,但这会产生一个错误,指出“没有什么可重复的”,我可以接受,所以我尝试了 .*PATTERN*
。然而,这个正则表达式没有给出预期的结果,见下文
import re
p = re.compile(".*PATTERN*")
s = "XXPATTERXX"
if p.match(s):
print s + " match with '.*PATTERN*'"
结果是
XXPATTERXX match with '.*PATTERN*'
为什么 "PATTER"
匹配?
注意:我知道我可以使用 .*PATTERN.*
来获得预期的结果,但我很想知道为什么它本身的星号无法获得结果。
最佳答案
您的模式在末尾匹配 0 个或多个 N
个字符,但没有说明那些 N
个字符之后的内容。
您可以将 $
添加到模式以锚定到输入字符串的末尾以禁止 XX
:
>>> import re
>>> re.compile(".*PATTERN*$")
<_sre.SRE_Pattern object at 0x10029fb90>
>>> import re
>>> p = re.compile(".*PATTERN*$")
>>> p.match("XXPATTERXX") is None
True
>>> p.match("XXPATTER") is None
False
>>> p.match("XXPATTER")
<_sre.SRE_Match object at 0x1004627e8>
您可能需要研究不同类型的 anchor 。 \b
也可能满足您的需求;它匹配单词边界(所以在 \w
和 \W
类字符之间,或者在 \W
和 \w
),或者你可以使用否定的前瞻和后视来禁止你的 PATTERN
字符串周围的其他字符。
关于python - 为什么 Python 正则表达式 ".*PATTERN*"匹配 "XXPATTERXX"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463189/