为什么表达包含'\'的正则表达式而不是原始字符串.

use*_*807 5 python regex python-3.4

请参阅此正则表达式HOWTO for python3

https://docs.python.org/3/howto/regex.html#performing-matches

>>> p = re.compile('\d+')
>>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping')
['12', '11', '10']
Run Code Online (Sandbox Code Playgroud)

我已经读过,对于正则表达式包含'\',应该使用原始字符串,r'\d+'但在此代码片段re.compile('\d+')中使用而不使用说明r符.它工作正常.为什么它首先起作用?为什么这个正则表达式不需要前面的'r'?

Tig*_*kT3 8

它碰巧工作,因为'\d'它不对应于像'\n''\t'做的特殊字符.有时原始字符串与常规字符串版本相同.但是,一般情况下,原始字符串将确保您的表达式不会出现任何意外.

  • 只是`\ d`不是一个有效的转义序列,当Python找到它时,它将````符号视为文字``\``.[*与标准C不同,所有未识别的转义序列都保留在字符串中不变,即反斜杠保留在字符串中.(调试时此行为很有用:如果转义序列输入错误,则生成的输出更容易被识别为已损坏.)请注意,仅在字符串文字中识别的转义序列属于无法识别的字节转义类别文字.*](https://docs.python.org/3.1/reference/lexical_analysis.html) (3认同)