Python的正则表达式如何处理已转义特殊字符的模式?

时间:2015-07-23 16:06:27

标签: python regex escaping special-characters

有没有办法让Python的正则表达式处理已转义特殊字符的模式?就我的有限理解而言,以下示例应该有效,但模式无法匹配。

import re

string = r'This a string with ^g\.$s'   # A string to search
pattern = r'^g\.$s'                     # The pattern to use

string = re.escape(string)              # Escape special characters
pattern = re.escape(pattern)

print(re.search(pattern, string))       # This prints "None"

注意:
是的,其他地方已经提出了这个问题(例如here)。但正如您所看到的,我已经实施了答案中描述的解决方案,而且它仍然无效。

1 个答案:

答案 0 :(得分:2)

为什么你要将re.escape 应用到string找到“special”中的字符!如果您只是将其应用于pattern,您将获得匹配:

>>> import re
>>> string = r'This a string with ^g\.$s'
>>> pattern = r'^g\.$s'
>>> re.search(re.escape(pattern), re.escape(string))  # nope
>>> re.search(re.escape(pattern), string)  # yep
<_sre.SRE_Match object at 0x025089F8>

对于奖励积分,请注意您只需要re.escape pattern一次string以上{/ 1}}:

>>> re.search(re.escape(re.escape(pattern)), re.escape(string))
<_sre.SRE_Match object at 0x025D8DE8>