Python re.match与相同的正则表达式不匹配

时间:2013-12-17 21:22:21

标签: python regex

我面临一个奇怪的问题;我希望以前没有人问这个问题 我需要匹配两个包含“(”“)”的正则表达式。

这是我为了解它无法正常工作而进行的一种测试:

>>> import re
>>> re.match("a","a")
<_sre.SRE_Match object at 0xb7467218>

>>> re.match(re.escape("a"),re.escape("a"))
<_sre.SRE_Match object at 0xb7467410>

>>> re.escape("a(b)")
'a\\(b\\)'

>>> re.match(re.escape("a(b)"),re.escape("a(b)"))

=&GT;不匹配

有人可以解释为什么正则表达式与自身不匹配吗?

非常感谢

2 个答案:

答案 0 :(得分:6)

您已转义特殊字符,因此您的正则表达式将匹配字符串"a(b)",而不是'a\(b\)'的结果字符串re.escape('a(b)')

答案 1 :(得分:1)

第一个参数是模式对象,第二个参数是您要匹配的实际字符串。你不应该逃避字符串本身。请记住,re.escape会在regexp中转义特殊字符。

>>> help(re.match)
Help on function match in module re:

match(pattern, string, flags=0)
    Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found.

>>> re.match(re.escape('a(b)'), 'a(b)')
<_sre.SRE_Match object at 0x10119ad30>