正则表达式 - `^`、`$` 和 `\A`、`\Z`之间的区别

19
据我所知,re 提供以下边界匹配。
  • ^ 匹配行的开头。
  • $ 匹配行的结尾。
  • \A 匹配输入的开头。
  • \Z 匹配输入的结尾。

你能否给我一个具体的例子来展示 ^$\A\Z 之间的实际区别?

1个回答

24

只有在使用re.Mre.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总是在字符串的结尾匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接