如何解决Python regex函数可计算子字符串的重复次数或划分子字符串?
我希望您能为我指明正确的方向,因为我对编程(尤其是Python)非常陌生。我试图在较大的字符串中找到某些子字符串的最大重复计数。例如,'AGATC'
在更长的字符串中重复了多少次(它可能只出现在一个地方,但是连续出现四次在另一个地方)。
我一直在阅读正则表达式,并编写了以下代码。它将成功分别打印出每个图案的重复次数,但是,我需要知道何时出现重复次数。我的代码的示例输出如下所示:
['AGATCAGATCAGATCAGATC','TATCTATCTATCTATCTATC','GAAA','GATA','AATG','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}")
此匹配项将返回所有连续匹配字符串的列表,如果按字母顺序对它们进行排序,则最长的字符串将始终是最后一个字符串,因为它们会重复该模式。然后,您可以计算该字符串中模式重复的次数。
如果只需要最长的重复次数,则可以如图所示计算这些数字的最大值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。