在Python正则表达式中指定匹配新行的不同方法
我发现有不同的方法来匹配python正则表达式中的新行。例如,下面代码中使用的所有模式都可以匹配新行在Python正则表达式中指定匹配新行的不同方法,python,regex,python-3.x,Python,Regex,Python 3.x,我发现有不同的方法来匹配python正则表达式中的新行。例如,下面代码中使用的所有模式都可以匹配新行 str = 'abc\n123' pattern = '\n' # print outputs new line pattern2 = '\\n' # print outputs \n pattern3 = '\\\n' # print outputs \ and new line pattern4 = r'\n' # print outputs \n s = re.search(pat
str = 'abc\n123'
pattern = '\n' # print outputs new line
pattern2 = '\\n' # print outputs \n
pattern3 = '\\\n' # print outputs \ and new line
pattern4 = r'\n' # print outputs \n
s = re.search(pattern, str).group()
print ('a' + s + 'a')
关于这一点,我有两个问题:
我使用的是Python3组合
\n
在Python本身和re
表达式中都指示“换行符”()
在常规Python字符串中,\n
被转换为换行符。然后,换行代码作为文字字符输入到re
解析器中
Python字符串中的双反斜杠被转换为单反斜杠。因此,字符串“\\n”
在内部存储为“\n”
,当发送到re
解析器时,它又将此组合\n
识别为指示换行代码
r
符号是一种快捷方式,可以防止输入双反斜杠:
反斜杠不会以任何特殊方式在前缀为'r'
()的字符串文字中处理
根据你的解释,它肯定会生成不同的模式,但我得到的所有模式的输出都是相同的。我只是回去仔细检查了一下。我认为他们应该生成不同的模式,但结果与我读到的那篇文章相矛盾,我认为我的主要问题是关于解析“\n”,当正则表达式解析它时,它是将它当作新行处理还是只是\n然后解析它,底层机制是什么?谢谢!但是第三种模式“\\\n”是如何解析的呢?它是一个反斜杠+新行。@user2628641:它的解析完全相同。这两个反斜杠被解析为一个反斜杠,然后是一个常规的换行符组合
\n
。因此“\\\n”=\+换行符,当重新解析程序看到这一点时,它将尝试转义换行符,但无法转义,因此它将以换行符作为模式。我想事情就是这样?@user2628641:啊,我明白你的意思了。是的,组合\+(文字换行符)
没有任何意义。它取决于特定的re
引擎接下来会发生什么;大多数情况下,实际上会忽略反斜杠,并在to搜索表达式中仅存储以下字符。