Python中的正则表达式引号

2024-04-26 22:01:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该如何声明正则表达式?你知道吗

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

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

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

在这种情况下,"\$"会产生什么结果?为什么?我会想"$"。你知道吗


Tags: re声明情况我会alldatareadfilemergeddata
3条回答

r'...'escapes sequences类似的'\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

基本上,如果\xwould create an esacped character in C,在字符串前缀中使用r与\\x相同:

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

I thought that I need to user the r'' to pass a regular expression.

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

What does "\$" result in this case? Why? I would have thought "$"

在Python普通字符串文本中,如果\后面没有转义序列,则\将被保留。因此"\$"导致\,然后是$。你知道吗

<>这个行为与C/C++或JavaScript处理类似情况的方式略有不同:{{CD4}}被认为是下一个字符的转义,只有下一个字符保留。所以这些语言中的"\$"将被解释为$。你知道吗

脚注

1:Python中原始字符串的设计有一个小缺陷:Why can't Python's raw string literals end with a single backslash?

相关问题 更多 >