有没有办法让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)。但正如您所看到的,我已经实施了答案中描述的解决方案,而且它仍然无效。
答案 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>