python - 在正则表达式中转义字符

标签 python regex

下面的正则表达式:

 [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/

相关文章:

regex - 使用正则表达式和 vb.net 从字符串中提取数字

python - 如何使用 pyparsing 获取匹配标记的位置?

python - 如何将视频脚本保存到文本文件?

python - 使用 Python 处理时 sparql 查询中的错误

java - 正则表达式字边界、Pattern.quote 和括号

regex - Visual Studio 代码 : How to automate a simple regex-find and replace?

python - 值错误 : Type names and field names must be valid identifiers: namedtuple

python - 将 pandas 提取正则表达式与多个组一起使用

javascript - 使用正则表达式的名称验证

java - 建议用 Java 创建一个翻译器