我面临一个奇怪的问题;我希望以前没有人问这个问题 我需要匹配两个包含“(”“)”的正则表达式。
这是我为了解它无法正常工作而进行的一种测试:
>>> 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;不匹配
有人可以解释为什么正则表达式与自身不匹配吗?
非常感谢
答案 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>