Python 中的正则表达式引用



我应该如何声明一个正则表达式?

mergedData = re.sub(r'$(.*?)$', readFile, allData)

我有点想知道为什么会这样。我认为我需要使用 r'' 来传递正则表达式。

mergedData = re.sub("$(.*?)$", readFile, allData)

在这种情况下,"$"会导致什么结果?为什么?我会认为"$".

我认为我需要使用 r'' 来传递正则表达式。

字符串文本之前的r表示原始字符串,这意味着通常的转义序列(如 nr(不再被视为换行符或回车符,而只是后跟 nr 。要指定,您只需要在原始字符串文本中,而您需要将其加倍\普通字符串文本中。这就是为什么通常使用原始字符串来指定正则表达式1 的原因。它减少了阅读代码时的混乱。如果使用普通字符串文字,则必须执行两次转义:一次用于普通字符串文字转义,第二次用于正则表达式中的转义。

在这种情况下,"$"会导致什么结果?为什么?我会想"$"

在 Python 普通字符串文本中,如果后面没有转义序列,则保留。因此"$"结果是后跟$

此行为与 C/C++ 或 JavaScript 处理类似情况的方式略有不同:被视为下一个字符的转义,仅保留下一个字符。因此,这些语言中的"$"将被解释为$ .

脚注

1:但是,Python中原始字符串的设计存在一个小缺陷:为什么Python的原始字符串文字不能以单个反斜杠结尾?

r'...'

'1' 一样转义序列(引用正则表达式中的第一组,但如果未转义,则与 'x01 ' 相同(。

一般来说,在r'...'中,反斜杠不会表现为转义字符。

尝试

 re.split('(.).1', '1x2x3')  # ['1x2x3']

与。

 re.split(r'(.).1', '1x2x3') # ['1', 'x', '3']

由于'$'不是 python 中的转义序列,因此它实际上与 '\$' 相同。

问蛇就知道了:

>>> r'$(.*?)$'=='$(.*?)$'
True
>>> r'vert'=='vert'
False
>>> r'123'=='123'
False
>>> r'#23'=='#23'
True

基本上,如果x要在 C 中创建 esaced 字符,则在字符串前缀中使用 r 与 \x 相同:

>>> r'123'=='\123'
True
>>> r'tab'=='\tab'
True

最新更新