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

Regex: counting the amount of times substring occurs in string including overlapping occurrences

我在 rosalind 上做一道题,希望您 return 子字符串在较长字符串中出现的位置。唯一的问题是出现重叠,输出应该是: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

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

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

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

否则,您也许可以适应

您需要使用前瞻。

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

输出:

[1, 3, 9]

10 秒搜索显示 this

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

一定要抓到第1组。

希望能帮到你,

代号Lambda