向我解释Python RegEx与r字符串的操作[重复]

问题描述 投票:0回答:1

为什么这没有像我预期的那样工作?

re.findall
不应该在这里返回一个空列表吗?因为我逃避了反斜杠...

>>> r"a\nb" == "a\nb"
False
>>> re.findall(r"a\nb", "a\nb")
['a\nb']

为什么这个额外的反斜杠在这里没有作用?对我来说,第一个返回应该是一个空列表,因为没有斜线后跟 n (

\\n
),而是一条断线 (
\n
)...

>>> re.findall("a\\nb", "a\nb")
['a\nb']
>>> re.findall("a\nb", "a\nb")
['a\nb']

那么,如果一个等于另一个,

re.findall
怎么会返回空呢?

>>> r"a\nb" == "a\\nb"
True
>>> re.findall(r"a\nb", "a\\nb")
[]
python regex rawstring
1个回答
-1
投票

转义序列

\n
被 Python 字符串文字解析器和正则表达式引擎理解为换行符。因此,在第一个示例中,原始字符串包含文字
\n
,正则表达式引擎将其与字符串中的换行符进行匹配。

为了匹配字符串中的文字

\n
,您需要将反斜杠转义到正则表达式引擎。

>>> re.findall(r"a\\nb", r"a\nb")
['a\\nb']
© www.soinside.com 2019 - 2024. All rights reserved.