REGEX - `^`、`$` 和 `\A`、`\Z` 之间的区别

问题描述 投票:0回答:2

据我所知,

re
提出了以下边界匹配。

  • ^
    匹配行首。
  • $
    匹配行尾。
  • \A
    匹配输入的开头。
  • \Z
    匹配输入的结尾。

你能给我一个具体的例子来说明

^
,
$
\A
,
\Z
之间的真正区别吗?

python regex
2个回答
26
投票

仅当您使用

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
始终匹配字符串的结尾。


0
投票

添加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 
© www.soinside.com 2019 - 2024. All rights reserved.