r 的作用(原始字符串 raw string)。字符串前加 r,代表原始字符串:字符串内所有 \ 不再做Python自身的转义处理,原样完整交给正则引擎解析,专门适配正则表达式大量反斜杠的写法。
1.例如:pattern=r'\d\.\d+'
解析:
\d 匹配数字
\. 匹配小数点(. 在正则里默认匹配任意字符,必须转义才代表字面小数点)
\d+ 匹配1个及以上数字
整体用来匹配 3.11、4.10 这类小数格式
2.不加 r 会发生什么?
去掉 r 写成:pattern='\d\.\d+'
Python 会先把字符串里的 \ 当成字符串转义符进行解析:
\d:Python普通字符串里 \d 不是合法转义序列,会原样保留传给正则,没问题
\.:普通字符串里 \. 也不是合法转义,同样原样保留
本例中刚好能正常运行,结果和加 r 一致
3. 但换场景就会出错(不加r的坑)
如果正则里用到 \n \t \b 这类:
例:匹配单词边界 \bword
写 pattern='\bword':Python会把 \b 解析成退格字符,传给正则就失效
写 pattern=r'\bword':r原始字符串,\b 完整传给正则,代表单词边界