何时在正则表达式模式中使用原始字符串?

Posted

技术标签:

【中文标题】何时在正则表达式模式中使用原始字符串?【英文标题】:When to use raw strings in regex patterns? 【发布时间】:2017-10-17 11:22:03 【问题描述】:

从regular expression 的文档中,我了解到建议对模式使用“原始”字符串,以确保不以任何特殊方式处理反斜杠:

正则表达式使用反斜杠字符('\')表示 特殊形式或允许使用特殊字符而不 调用它们的特殊含义。这与 Python 的使用相冲突 字符串文字中用于相同目的的相同字符;为了 例如,要匹配文字反斜杠,可能必须编写 '\\\\' 作为模式字符串,因为正则表达式必须是\\,并且 每个反斜杠必须在常规 Python 字符串中表示为 \\ 字面意思。

解决方案是使用 Python 的原始字符串表示法 表达模式;反斜杠不以任何特殊方式处理 以 'r' 为前缀的字符串文字。

我想知道其他情况(除了文字反斜杠)可能需要使用原始字符串吗?

【问题讨论】:

几乎所有可以解释为 Python 字符串转义序列的东西......不是吗? 在处理路径时很有用,至少在 Windows 上......例如“C:\Users\Me\Desktop”的行为可能不符合预期。 【参考方案1】:

另一个例子是像\1\2 这样的序列,它们在 Python 字符串中是八进制转义,但在正则表达式中引用捕获的组。

>>> re.search(r"(\w+) \1", "the the")
<_sre.SRE_Match object; span=(0, 7), match='the the'>
>>> re.search("(\w+) \1", "the the")
>>> 

【讨论】:

以上是关于何时在正则表达式模式中使用原始字符串?的主要内容,如果未能解决你的问题,请参考以下文章

正则与python的re模块

特定模式的正则表达式提取

使用正则表达式保留中间字符串

Java中的正则表达式

Python正则表达式初识

书籍正则