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