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

How can Python's regular expressions work with patterns that have escaped 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)。但是正如您所见,我已经在实施答案中描述的解决方案,但它仍然无法正常工作。

你究竟为什么要 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 patternstring:

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