正则表达式:计算子字符串在字符串中出现的次数,包括重叠出现
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
参数传递给 findall
和 finditer
.
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
我在 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
参数传递给 findall
和 finditer
.
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