2024-04-26 22:01:23 发布
网友
我应该如何声明正则表达式?你知道吗
mergedData = re.sub(r'\$(.*?)\$', readFile, allData)
我有点想知道为什么会这样。我认为我需要使用r''来传递正则表达式。你知道吗
r''
mergedData = re.sub("\$(.*?)\$", readFile, allData)
在这种情况下,"\$"会产生什么结果?为什么?我会想"$"。你知道吗
"\$"
"$"
与r'...'escapes sequences类似的'\1'(引用正则表达式中的第一个组,但如果不转义,则与'\x01相同)。你知道吗
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
基本上,如果\xwould create an esacped character in C,在字符串前缀中使用r与\\x相同:
\x
\\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,不再被视为新行字符或回车符,而只是\后跟n或r。要指定\,只需要原始字符串文本中的\,而在普通字符串文本中需要将其加倍\\。这就是为什么通常使用原始字符串来指定正则表达式1。它减少了阅读代码时的混乱。如果使用普通字符串文字,则必须进行两次转义:一次用于普通字符串文字转义,第二次用于正则表达式中的转义。你知道吗
r
\n
\r
\
n
\\
What does "\$" result in this case? Why? I would have thought "$"
在Python普通字符串文本中,如果\后面没有转义序列,则\将被保留。因此"\$"导致\,然后是$。你知道吗
$
脚注
1:Python中原始字符串的设计有一个小缺陷:Why can't Python's raw string literals end with a single backslash?
与
r'...'
escapes sequences类似的'\1'
(引用正则表达式中的第一个组,但如果不转义,则与'\x01
相同)。你知道吗一般来说,在
r'...'
中,反斜杠不会表现为转义字符。你知道吗试试看
与
由于
'\$'
在python中不是转义序列,因此它实际上与'\\$'
相同。你知道吗问问蛇:
基本上,如果
\x
would create an esacped character in C,在字符串前缀中使用r与\\x
相同:字符串前面的
r
表示原始字符串,这意味着通常的转义序列,如\n
或\r
,不再被视为新行字符或回车符,而只是\
后跟n
或r
。要指定\
,只需要原始字符串文本中的\
,而在普通字符串文本中需要将其加倍\\
。这就是为什么通常使用原始字符串来指定正则表达式1。它减少了阅读代码时的混乱。如果使用普通字符串文字,则必须进行两次转义:一次用于普通字符串文字转义,第二次用于正则表达式中的转义。你知道吗在Python普通字符串文本中,如果
<>这个行为与C/C++或JavaScript处理类似情况的方式略有不同:{{CD4}}被认为是下一个字符的转义,只有下一个字符保留。所以这些语言中的\
后面没有转义序列,则\
将被保留。因此"\$"
导致\
,然后是$
。你知道吗"\$"
将被解释为$
。你知道吗脚注
1:Python中原始字符串的设计有一个小缺陷:Why can't Python's raw string literals end with a single backslash?
相关问题 更多 >
编程相关推荐