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

2024-09-28 22:02:19 发布

您现在位置: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)

Tags: the字符串代码inreforasrow
1条回答
网友
1楼 · 发布于 2024-09-28 22:02:19

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

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}")

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

相关问题 更多 >