Python中的正则表达式引用

Python中的正则表达式引用,python,regex,Python,Regex,我应该如何声明正则表达式 mergedData = re.sub(r'\$(.*?)\$', readFile, allData) 我有点想知道为什么会这样。我认为我需要使用r'来传递正则表达式 mergedData = re.sub("\$(.*?)\$", readFile, allData) 在这种情况下,“\$”会产生什么结果?为什么?我本以为“$”r'.类似于'\1'(引用正则表达式中的第一个组,但如果不转义,则与'\x01'相同) 一般来说,在r'…'中,反斜杠不会表现为转义字符

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

mergedData = re.sub(r'\$(.*?)\$', readFile, allData)
我有点想知道为什么会这样。我认为我需要使用
r'
来传递正则表达式

mergedData = re.sub("\$(.*?)\$", readFile, allData)
在这种情况下,
“\$”
会产生什么结果?为什么?我本以为
“$”

r'.
类似于
'\1'
(引用正则表达式中的第一个组,但如果不转义,则与
'\x01
'相同)

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

试一试

vs

由于
'\$'
在python中不是转义序列,因此它与
'\\$'

完全相同,只要问问蛇:

>>> r'\$(.*?)\$'=='\$(.*?)\$'
True
>>> r'\vert'=='\vert'
False
>>> r'\123'=='\123'
False
>>> r'\#23'=='\#23'
True
基本上,如果
\x
,在字符串前缀中使用r与
\\x
相同:

>>> r'\123'=='\\123'
True
>>> r'\tab'=='\\tab'
True
我认为我需要使用r“”来传递正则表达式

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

在这种情况下,
“\$”
会产生什么结果?为什么?我会想,
“$”

在Python普通字符串文字中,如果
\
后面没有转义序列,则保留
\
。因此,
“\$”
导致
\
后面跟着
$

这种行为与C/C++或JavaScript处理类似情况的方式略有不同:
\
被认为是下一个字符的转义,只剩下下一个字符。因此,这些语言中的
“\$”
将被解释为
$

脚注


1:Python中原始字符串的设计存在一个小缺陷:

为什么要恢复编辑<代码>r''和
“\$”
是代码。谢谢。我想我被C弄糊涂了。(我总是被C弄糊涂。)
>>> r'\123'=='\\123'
True
>>> r'\tab'=='\\tab'
True