【发布时间】:2026-01-16 04:50:01
【问题描述】:
我希望您能帮助我指明正确的方向,因为我对编程尤其是 Python 非常陌生。我试图在较大的字符串中找到某些子字符串的最大重复计数。例如,'AGATC' 在更长的字符串中重复了多少次(它可能只出现在一个地方,但在另一个地方连续出现四次)。
我一直在为此阅读正则表达式并编写了下面的代码。它将成功地分别打印出每个模式的重复次数,但是,我需要知道它出现时的重复次数。我的代码的示例输出如下所示:
['AGATCAGATCAGATCAGATC', 'TATCTATCTATCTATCTATC', 'GAAA', 'GATA', 'AATG', 'GAAA', 'GAAA', 'GATA']
在这种情况下'AGATC' 出现四次,但'TATC' 重复五次,所以我需要它作为整数。如果有人有任何想法可以推动我前进,我将不胜感激。
这是我的完整代码:
import re
# Opens the textfile and stores it as a string
with open('STR.txt') as strfile:
for row in strfile:
STRs = row
# Defines patterns we are searching for in STR
pattern1 = (r'(?:AGATC)+')
pattern2 = (r'(?:TTTTTTCT)+')
pattern3 = (r'(?:AATG)+')
pattern4 = (r'(?:TCTAG)+')
pattern5 = (r'(?:GATA)+')
pattern6 = (r'(?:TATC)+')
pattern7 = (r'(?:GAAA)+')
pattern8 = (r'(?:TCTG)+')
# Recompiles all patterns into one single pattern
mainpattern = re.compile("(%s|%s|%s|%s|%s|%s|%s|%s)" % (pattern1, pattern2, pattern3, pattern4, pattern5, pattern6, pattern7, pattern8))
# Finds the pattern matches in STR
STR_match = re.findall(mainpattern, STRs)
print(STR_match)
【问题讨论】:
-
如果我对您的理解正确,您不想要重复的字符串(例如 'AGATCAGATCAGATCAGATC',而是 4 个单匹配项),然后您可以对其进行计数。如果是这样,您只需从搜索模式中删除“+”并检查结果列表的长度。
-
有点,我需要的是计算重复次数在“AGATCAGATCAGATCAGATC”的情况下,它对应于 4,但如果 AGATC 出现在字符串中的另一个位置,我会得到 5 并且将是不正确的,因为我需要计算字符串中任何位置的最大重复次数。不幸的是,我认为删除 + then 会产生不正确的结果?
-
啊,所以你想要任何模式的最大连续重复次数?例如。在您的示例 5 中为
TATC...部分? -
没错,这就是我想要弄清楚的。
标签: python regex string dictionary substring