与^,$匹配的重新匹配模式

时间:2018-09-28 05:52:12

标签: python regex

在下面的代码中:

    >>> 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'参数时,是否存在匹配项?为什么会有所不同?

1 个答案:

答案 0 :(得分:2)

您必须深入研究文档,但是答案就在那里。您将在pattern.search的文档中找到以下信息,同样的描述也适用于pattern.match

  

可选的第二个参数pos在字符串中给出一个索引,其中   搜索将开始;它默认为0。这不完全是   等效于将字符串切片; '^'模式字符与匹配   字符串的实际开头,并且紧接在   换行符,,但不一定位于要搜索的索引处   开始。

因此,这意味着SOL锚点^从字符串的真实开头开始匹配(而不是从pos指定的位置开始匹配。OTOH,

  

可选参数endpos限制字符串的长度   搜索;就像字符串是endpos字符长一样,所以   仅搜索posendpos - 1中的字符   匹配。

强调我的。这意味着具有EOL锚点^的模式实际上只会匹配最多endpos(与pos不同)。