我发现有不同的方法来匹配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是一个新行,pattern2和pattern4是\ n。为什么python正则表达式为不同的字符串生成相同的模式?
不确定为什么pattern3也会生成相同的模式。传递给re parser时,pattern3代表\ + new line,为什么re parser会将其转换为匹配的新行?
我正在使用Python 3
答案 0 :(得分:2)
组合\n
表示'换行符'在两者中 Python本身和在re
表达式中(https://docs.python.org/2.0/ref/strings.html)。
在常规Python字符串中,\n
被转换为换行符。然后将换行符代码作为文字字符输入re
解析器。
Python字符串中的 double 反斜杠被转换为单个字符串。因此,字符串"\\n"
在内部存储为"\n"
,当发送到re
解析器时,它会将此组合\n
识别为表示换行代码。
r
符号是防止必须输入双倍双反斜杠的快捷方式:
在前缀为'r'
(https://docs.python.org/2/library/re.html)的字符串文字中,不会以任何特殊方式处理反斜杠