下面的正则表达式:
[a-z]+[\\.\\?]
为什么 \\
斜杠用了两次而不是一次?
最佳答案
The regular expression below:
[a-z]+[\\.\\?]
...不是正则表达式而是字符串(它可以是正则表达式的模式;例如,您可以通过将其传递给 re.compile
来为其构建 RE) .
Why is
\\
slash used twice instead of once?
您可能误解了发生了什么......:
>>> s = '[a-z]+[\\.\\?]'
>>> s
'[a-z]+[\\.\\?]'
>>> print(s)
[a-z]+[\.\?]
您在每种情况下输入 \
两次,以使第一个“转义”第二个,即阻止它形成“转义序列” "与下一个字符。当您查看字符串的 repr
时,您看到它两次(这是交互式 Python shell 向您显示的内容,当您在其提示符下输入字符串对象绑定(bind)的名称时例如)。但是当您只查看字符串时,您只会看到它一次,例如 print
—— 字符串本身没有重复,您可能只是被“输入两次”和“显示”弄糊涂了两次”(在 repr
中)特征。
输入完全相同的字符串值的另一种更方便的方法,也作为文字:
>>> z = r'[a-z]+[\.\?]'
>>> z
'[a-z]+[\\.\\?]'
>>> print(z)
[a-z]+[\.\?]
>>> z == s
True
r
前缀(“原始文字”)表示以下反斜杠均不被视为转义序列的一部分——每个反斜杠都代表自己,因此不需要加倍。
请注意 z
的行为与 s
完全相同,并且实际上等于它:领先的 r
确实不 make "strings of a different type", 只是提供了一种方便的方式来输入带有大量反斜杠的字符串而不将它们加倍(这是为了方便输入作为正则表达式模式的文字字符串;r
也可以被视为代表“正则表达式模式”:-)。
关于python - 在正则表达式中转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437072/