Python正则表达式函数来计算子字符串的重复次数或除法子字符串



我希望你能帮我指明正确的方向,因为我对编程特别是Python非常陌生。我试图在一个较大的字符串中找到某些子字符串的最大重复次数。例如,'AGATC'在一个更长的字符串中重复了多少次(它可能只出现在一个位置,但在另一个位置连续出现四次(。

我已经为此阅读了regex,并编写了下面的代码。它将成功地分别打印出每个图案的重复次数,然而,我需要知道它出现时的重复次数。我的代码输出示例如下:

['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)

如果我正确理解您的问题,您可以对每个模式分别执行此操作,例如:

patterns = ('AGATC', 'TTTTTTCT', 'AATG', 'TCTAG', ...)
max_len = 0
max_pattern = None
for pattern in patterns:
match = re.findall(f'(?:{pattern})+', STRs)
if match:
longest = sorted(match)[-1]  # last is the longest match
l = len(longest)/len(pattern)
if l > max_len:
max_len = l
max_pattern = pattern
print(f"{max_len} x {max_pattern}")

此匹配将返回所有连续匹配字符串的列表,如果按字母顺序对它们进行排序,则最长的字符串将始终是最后一个,因为它们重复该模式。然后,您可以计算该字符串中的模式重复次数
如果您只需要最长的重复,您可以计算出这些数字的最大值,如图所示。

最新更新