re.search如何匹配原始字符串?

时间:2015-01-04 09:30:26

标签: python regex

re.search(r'c\.t', 'c.t abc')成功匹配c.t。但匹配的模式是c\.tc.tc\.t的匹配程度如何?反斜杠怎么了?

1 个答案:

答案 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关于换行的优秀观点