我在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
任何帮助将不胜感激,谢谢!
答案 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