如何匹配Python原始字符串中的新行字符

wei*_*wei 27 python regex rawstring

我对Python原始字符串有点困惑.我知道如果我们使用原始字符串,那么它会将'\'视为正常的反斜杠(例如r'\n'将是'\'和'n').但是,我想知道如果我想匹配原始字符串中的新行字符.我试过r'\n',但它不起作用.有人对此有一些好主意吗?

mgi*_*son 26

在正则表达式中,您需要指定您处于多行模式:

>>> import re
>>> s = """cat
... dog"""
>>> 
>>> re.match(r'cat\ndog',s,re.M)
<_sre.SRE_Match object at 0xcb7c8>
Run Code Online (Sandbox Code Playgroud)

请注意,re\n(原始字符串)转换为换行符.正如您在评论中指出的那样,您实际上并不需要 re.M匹配它,但它确实有助于匹配$并且^更直观:

>> re.match(r'^cat\ndog',s).group(0)
'cat\ndog'
>>> re.match(r'^cat$\ndog',s).group(0)  #doesn't match
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r'^cat$\ndog',s,re.M).group(0) #matches.
'cat\ndog'
Run Code Online (Sandbox Code Playgroud)

  • 使用 re.DOTALL 选项匹配 `\n`。 (2认同)

Gar*_*tty 8

最简单的答案是不使用原始字符串.您可以使用以逃避反斜杠\\.

如果在某些段中有大量的反斜杠,那么您可以根据需要连接原始字符串和普通字符串:

r"some string \ with \ backslashes" "\n"
Run Code Online (Sandbox Code Playgroud)

(Python自动连接字符串文字,它们之间只有空格.)

请记住,如果您正在使用Windows上的路径,最简单的选择是使用正斜杠 - 它仍然可以正常工作.