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
pattern
比 string
:
多一次
>>> re.search(re.escape(re.escape(pattern)), re.escape(string))
<_sre.SRE_Match object at 0x025D8DE8>
有没有办法让 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
pattern
比 string
:
>>> re.search(re.escape(re.escape(pattern)), re.escape(string))
<_sre.SRE_Match object at 0x025D8DE8>