re.search(r'c\.t', 'c.t abc')
成功匹配c.t
。但匹配的模式是c\.t
,c.t
与c\.t
的匹配程度如何?反斜杠怎么了?
答案 0 :(得分:1)
在正则表达式中,点字符具有特殊含义,即它可以匹配换行符以外的任何字符(除非使用re.S
/ re.DOTALL
标志)。在这种情况下,反斜杠的作用是将点从其特殊含义中转出,并让正则表达式引擎将其解释为字面上只匹配一个点(而不是其他字符)。考虑反斜杠是否不存在:
>>> re.search(r'c.t', 'c.t abc')
<_sre.SRE_Match object at 0x7fe7378d8370>
您提供的原始字符串仍然匹配。但现在以下内容也将匹配:
>>> re.search(r'c.t', 'I saw a cat')
<_sre.SRE_Match object at 0x7fe7378d83d8>
由于a
中的cat
符合任何非换行符,因此如果未使用反斜杠,.
将匹配。您可以看到,如果我们重新添加反斜杠,它将不再匹配。
>>> print(re.search(r'c\.t', 'I saw a cat'))
None
更多关于Python在这里实现正则表达式的内容:
Python 2.7.x:https://docs.python.org/2/library/re.html
Python 3.4.x:https://docs.python.org/3/library/re.html
编辑反映@ cdarke关于换行的优秀观点