据我所知,
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
^
匹配一个行首的位置(紧随换行符之后)。$
匹配一个行尾的位置:
>>> 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
总是在字符串的开头匹配,\Z
总是在字符串的结尾匹配。