我需要在字符串中找到子字符串的连续(非重叠)重复。我可以计算它们但不是连续的。例如:
string = "AASDASDDAAAAAAAAERQREQREQRAAAAREWQRWERAAA"
substring = "AA"
Run Code Online (Sandbox Code Playgroud)
在这里,"AA"在字符串的开头重复一次,然后是 4 次,然后是 2 次,等等。我应该选择最大的一个,在这个例子中 - 4 次。
我怎样才能做到这一点?
Mar*_*yer 14
正则表达式在搜索字符串时大放异彩。在这里你可以找到一个或以上的团体AA与(?:AA)+在(?:简单地告诉引擎解释括号唯一分组。
有了组后,您就可以max()根据长度 ( len())找到最长的组。
import re
s = "AASDASDDAAAAAAAAERQREQREQRAAAAREWQRWERAAA"
groups = re.findall(r'(?:AA)+', s)
print(groups)
# ['AA', 'AAAAAAAA', 'AAAA', 'AA']
largest = max(groups, key=len)
print(len(largest) // 2)
# 4
Run Code Online (Sandbox Code Playgroud)
使用基本操作完成此操作的一种方法是在字符串中搜索模式“AA”并将“AA”添加到搜索中,直到找不到其他模式为止:
string = "AASDASDDAAAAAAAAERQREQREQRAAAAREWQRWERAAA"
count = 0
pattern = "AA"
while pattern in string:
count += 1
pattern += "AA"
Run Code Online (Sandbox Code Playgroud)
输出:
print(count) # 4
Run Code Online (Sandbox Code Playgroud)
也可以像这样写在一行上:
count = next(r-1 for r in range(1,len(string)+1) if "AA"*r not in string)
Run Code Online (Sandbox Code Playgroud)
对于更高级的解决方案(使用正则表达式),您可以尝试以下操作:
import re
count = max(map(len,re.findall("AA+",string) ))//2
Run Code Online (Sandbox Code Playgroud)