无法搜索'\\n';在python3中使用正则表达式

无法搜索'\\n';在python3中使用正则表达式,python,regex,python-3.x,Python,Regex,Python 3.x,为什么它显示\n8而不显示\n5? 我第一次在\n前面用了一个\。 我发现在python的正则表达式中使用原始字符串有点令人困惑。在我看来,它似乎没有对结果进行任何更改,因为\\n5不是有效的新行,它将打印\n5 \\n不是换行符,它是带n的转义反斜杠 >>> import re >>> a='''\\n5 ... 8''' >>> b=re.findall('\\n[0-9]',a) >>> print(b) ['\n8'

为什么它显示
\n8
而不显示
\n5
? 我第一次在
\n
前面用了一个
\

我发现在python的正则表达式中使用原始
字符串有点令人困惑。在我看来,它似乎没有对结果进行任何更改,因为
\\n5
不是有效的新行,它将打印
\n5

\\n
不是换行符,它是带n的转义反斜杠

>>> import re
>>> a='''\\n5
... 8'''
>>> b=re.findall('\\n[0-9]',a)
>>> print(b)
['\n8']

这是因为在字符串中,换行符被认为是单个字符

当您执行
\\n5
时,您正在转义
\
,因此这实际上是在打印
\n5
,而不是Python标准的换行符


当你搜索一个正则表达式,比如
\\n[0-9]
时,在第一个
\
中,你要转义
\n
正则表达式,所以最后你要寻找的是
\n
,这是Python的新行。它与字符串中的实际换行符匹配,但不匹配
\\n
,后者是两个独立的字符,一个转义的
\
和一个
n

如何在结果中获取\\n5?@VaibhavPandey如果您想同时获取
\\n5
\n8
,可以使用非捕获组来检查这两个字符中的一个:
'(?:\\n |\\\\n)[0-9]'
。如果您只需要
\\n5
,请包括双转义斜杠:
“\\\\n[0-9]'
>>> import re
>>> a = '''\n5
... 8'''
>>> a=re.findall('\\n[0-9]',a)
>>> print(a)
['\n5', '\n8']