Python编译模式匹配标志,cp.search匹配行的开头

时间:2017-08-28 02:31:01

标签: python regex python-2.7

我有这个,没有匹配,为什么?:

>>> p = r'abc'
>>> cp = re.compile(p, re.IGNORECASE)
>>> m = cp.search('ABC', re.IGNORECASE)
>>> m # NO MATCH # 1

但是,这给了一个匹配,为什么?

>>> m = cp.search('  ABC', re.IGNORECASE) # introduced spaces, ABC no longer at the beginning 
>>> m # MATCH # 2
<_sre.SRE_Match object at 0x1082b5ac0>

要获得#1中的匹配,我所要做的就是删除re.IGNORECASE,为什么会这样?

>>> m = cp.search('ABC')
>>> m
<_sre.SRE_Match object at 0x10827e308>

1 个答案:

答案 0 :(得分:1)

如果(在解释器中)你打印出关于cp.search的帮助:

help(cp.search)
你会看到:

Help on built-in function search:
search(string=None, pos=0, endpos=9223372036854775807, *, pattern=None) method of _sre.SRE_Pattern instance
    Scan through string looking for a match, and return a corresponding match object instance.

    Return None if no position in the string matches.

请注意,此函数不带任何标志,但实际上您将标志传递给'pos'参数,这就是您获得意外结果的原因。