正则表达式:计算字符串中包含子串的次数,包括重叠的出现次数

时间:2016-04-25 18:20:32

标签: python regex string overlapping

我在rosalind上做了一个问题,希望你返回一个子字符串出现在较长字符串中的位置。唯一的问题是重叠发生,输出应该是:1,3,9(假设0基于计数),但我只得到1和9?这是我的代码。

import re

s='GATATATGCATATACTT'
t='ATAT'

substrings=re.compile('ATAT')
matches=substrings.finditer(s)

for match in matches:
     print(match.start()+1)  #doesn't find overlapping ones

任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:2)

如果您可以安装第三方模块,regex模块具有re模块API的扩展版本,允许将overlapped=True参数传递给findall }和finditer

https://pypi.python.org/pypi/regex

否则,您可以调整this answer

答案 1 :(得分:1)

你需要使用前瞻。

import re
s='GATATATGCATATACTT'
t='ATAT'
print([match.start() for match in re.finditer('(?=%s)' % t, s)])

输出:

[1, 3, 9]

答案 2 :(得分:1)

10秒的搜索显示this

你基本上必须用“(?=”和“)”包围你的RegEx。这是一个积极的前瞻,导致RegEx不会阻止字符串的一部分以供将来匹配。

请务必捕获第1组。

我希望我能提供帮助,

CodenameLambda