在下面的代码中:
>>> pattern = re.compile(r'^<HTML>')
>>> pattern.match("<HTML>")
<_sre.SRE_Match at 0x1043bc8b8>
>>> pattern.match("⇢ ⇢ <HTML>", 2) # ⇢ stands for whitespace character.
None
当我们使用^元字符和匹配模式时,即使
,下面给出的开头的空白字符也不会匹配'pos'参数等于2,给出的原因是 在这种情况下,元字符^不能匹配(<位于位置2,并且不能与^匹配)。
>>> pattern = re.compile(r'<HTML>$')
>>> pattern.match("<HTML>⇢", 0,6) # ⇢ stands for whitespace character.
<_sre.SRE_Match object at 0x1007033d8>
>>> pattern.match("<HTML>⇢"[:6])
<_sre.SRE_Match object at 0x100703370>
但是,当我们在正则表达式的末尾使用$并给出'end'参数时,是否存在匹配项?为什么会有所不同?
答案 0 :(得分:2)
您必须深入研究文档,但是答案就在那里。您将在pattern.search
的文档中找到以下信息,同样的描述也适用于pattern.match
。
可选的第二个参数pos在字符串中给出一个索引,其中 搜索将开始;它默认为0。这不完全是 等效于将字符串切片;
'^'
模式字符与匹配 字符串的实际开头,并且紧接在 换行符,,但不一定位于要搜索的索引处 开始。
因此,这意味着SOL锚点^
从字符串的真实开头开始匹配(而不是从pos
指定的位置开始匹配。OTOH,
可选参数endpos限制字符串的长度 搜索;就像字符串是endpos字符长一样,所以 仅搜索
pos
至endpos - 1
中的字符 匹配。
强调我的。这意味着具有EOL锚点^
的模式实际上只会匹配最多endpos
(与pos
不同)。