在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

我发现有不同的方法来匹配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(pattern, str).group()
print ('a' + s + 'a')
关于这一点,我有两个问题:

  • pattern是新行,pattern 2和pattern 4是\n。为什么python正则表达式为不同的字符串生成相同的模式

  • 不确定pattern3为什么也会生成相同的图案。当传递给re解析器时,pattern3代表\+新行,为什么re解析器将其转换为仅匹配新行


  • 我使用的是Python3

    组合
    \n
    在Python本身和
    re
    表达式中都指示“换行符”()

    在常规Python字符串中,
    \n
    被转换为换行符。然后,换行代码作为文字字符输入到
    re
    解析器中

    Python字符串中的双反斜杠被转换为单反斜杠。因此,字符串
    “\\n”
    在内部存储为
    “\n”
    ,当发送到
    re
    解析器时,它又将此组合
    \n
    识别为指示换行代码

    r
    符号是一种快捷方式,可以防止输入双反斜杠:

    反斜杠不会以任何特殊方式在前缀为
    'r'
    ()的字符串文字中处理


    根据你的解释,它肯定会生成不同的模式,但我得到的所有模式的输出都是相同的。我只是回去仔细检查了一下。我认为他们应该生成不同的模式,但结果与我读到的那篇文章相矛盾,我认为我的主要问题是关于解析“\n”,当正则表达式解析它时,它是将它当作新行处理还是只是\n然后解析它,底层机制是什么?谢谢!但是第三种模式“\\\n”是如何解析的呢?它是一个反斜杠+新行。@user2628641:它的解析完全相同。这两个反斜杠被解析为一个反斜杠,然后是一个常规的换行符组合
    \n
    。因此“\\\n”=\+换行符,当重新解析程序看到这一点时,它将尝试转义换行符,但无法转义,因此它将以换行符作为模式。我想事情就是这样?@user2628641:啊,我明白你的意思了。是的,组合
    \+(文字换行符)
    没有任何意义。它取决于特定的
    re
    引擎接下来会发生什么;大多数情况下,实际上会忽略反斜杠,并在to搜索表达式中仅存储以下字符。