据我所知,
re
提出了以下边界匹配。
^
匹配行首。$
匹配行尾。\A
匹配输入的开头。\Z
匹配输入的结尾。你能给我一个具体的例子来说明
^
, $
和 \A
, \Z
之间的真正区别吗?
re.M
或 re.MULTILINE
多行标志: 时,差异才会变得明显
>>> re.search(r'^word', 'Line one\nword on line two\n', flags=re.M)
<_sre.SRE_Match object at 0x10124f578>
>>> re.search(r'\Aword', 'Line one\nword on line two\n', flags=re.M) is None
True
其中
^
在 line 的开头匹配(在换行符之后)。 $
匹配行尾:
>>> re.search(r'word$', 'Line one word\nLine two\n', flags=re.M)
<_sre.SRE_Match object at 0x10123e1d0>
>>> re.search(r'word\Z', 'Line one word\nLine two\n', flags=re.M) is None
True
来自文档:
re.M
re.MULTILINE
指定后,模式字符
匹配字符串的开头和每行的开头(紧接着每个换行符);模式字符'^'
匹配字符串末尾和每行末尾(紧邻每个换行符之前)。默认情况下,'$'
仅在字符串的开头匹配,而'^'
仅在字符串的末尾以及字符串末尾的换行符(如果有)之前匹配。'$'
\A
always 无论如何都匹配字符串的开头,\Z
始终匹配字符串的结尾。
添加Martijn Pieters的答案:在Python中,即使没有
$
标志,\Z
和re.MULTILINE
之间也有区别。
>>> re.search(r'word$', 'word\n')
<re.Match object; span=(0, 4), match='word'>
>>> re.search(r'word\Z', 'word\n') is None
True
这是已记录。
$
匹配字符串的末尾或字符串末尾的换行符之前[...]
这在 javascript 中是不同的。
>> /word$/.exec('word\n')
null