在以下守则中:
>>> pattern = re.compile(r'^<HTML>')
>>> pattern.match("<HTML>")
<_sre.SRE_Match at 0x1043bc8b8>
>>> pattern.match("⇢ ⇢ <HTML>", 2) # ⇢ stands for whitespace character.
None当我们使用^ metacharacter和匹配模式时,下面给出的开头的任何空格字符都不会给出匹配,即使
‘'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‘参数时,是否有匹配呢?为什么会有区别?
发布于 2018-09-28 05:58:48
你得稍微钻研一下文档,但答案就在那里。您将在pattern.search的文档中找到以下信息,同样的描述也适用于pattern.match。
可选的第二个参数pos在要开始搜索的字符串中提供一个索引;它默认为0。这并不完全等同于对字符串进行切片;模式字符在字符串的真正开头和在换行符()之后的位置匹配,但不一定在开始搜索的索引处匹配。。
因此,这意味着SOL锚点^将与字符串的真正开头匹配(而不是pos指定的位置)。OTOH
可选参数endpos限制了字符串的搜索范围;如果字符串是endpos字符长,那么只有从
posendpos - 1到endpos - 1的字符才会被搜索到匹配。
强调我的。这意味着带有EOL锚^的模式实际上只匹配到endpos (与pos不同)。
https://stackoverflow.com/questions/52549120
复制相似问题