何时在正则表达式模式中使用原始字符串?
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")
>>>
【讨论】:
以上是关于何时在正则表达式模式中使用原始字符串?的主要内容,如果未能解决你的问题,请参考以下文章