【发布时间】:2020-08-19 01:14:12
【问题描述】:
我对在 python 中使用 re 模块时的反斜杠有疑问。考虑代码:
import re
message = 'My phone number is 345-298-2372'
num_reg = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
match = num_reg.search(message)
print(match.group())
在上面的代码中,原始字符串被传递给re.compile 方法,但反斜杠仍然不被视为文字字符,因为/d 仍然是一个数字的占位符。那为什么是原始字符串呢?
【问题讨论】:
-
... 因为这就是
\d在正则表达式中的含义?在这种特殊情况下,原始字符串不会做任何事情。 -
@Loocid 不,不会。
r'\d\d\d-\d\d\d-\d\d\d\d'和'\d\d\d-\d\d\d-\d\d\d\d'产生相同的字符串。即r'\d\d\d-\d\d\d-\d\d\d\d' == '\d\d\d-\d\d\d-\d\d\d\d' -
\d不是需要转义的特殊序列,在原始字符串或“普通”字符串中使用它并没有什么区别。\n(换行符)之类的东西是原始字符串产生2个文字字符而不是单个字符的地方。这里有一个 Python 中的“转义序列”表docs.python.org/3/reference/… -
@juanpa.arrivillaga 它确实做了一些事情。防止 DeprecationWarning: invalid escape sequence \d.