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)
最简单的答案是不使用原始字符串.您可以使用以逃避反斜杠\\.
如果在某些段中有大量的反斜杠,那么您可以根据需要连接原始字符串和普通字符串:
r"some string \ with \ backslashes" "\n"
Run Code Online (Sandbox Code Playgroud)
(Python自动连接字符串文字,它们之间只有空格.)
请记住,如果您正在使用Windows上的路径,最简单的选择是使用正斜杠 - 它仍然可以正常工作.