re.finditer()为start和end方法返回相同的值

lst*_*tbl 6 python regex python-itertools

我在python中的re.finditer()方法遇到了一些麻烦.例如:

>>>sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
>>>[[m.start(),m.end()] for m in re.finditer(r'(?=gatttaacg)',sequence)]

out: [[22,22]]
Run Code Online (Sandbox Code Playgroud)

如您所见,start()end()方法给出了相同的值.我之前注意到了这一点,并且最终使用了m.start()+len(query_sequence),而不是m.end(),但我很困惑为什么会发生这种情况.

Pad*_*ham 5

正则表达式模块支持与finditer重叠:

import regex
sequence = 'acaca'
print [[m.start(), m.end()] for m in regex.finditer(r'(aca)', sequence, overlapped=1)]
[0, 3], [2, 5]]
Run Code Online (Sandbox Code Playgroud)

  • @lstbl:请注意,此答案中的“regex”模块与您使用的标准库“re”模块完全不同。 (3认同)
  • 我没有注意到 (2认同)