如何计算字符串中子字符串的连续重复次数?

inm*_*ble 7 python string

我需要在字符串中找到子字符串的连续(非重叠)重复。我可以计算它们但不是连续的。例如:

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)


Ala*_* T. 6

使用基本操作完成此操作的一种方法是在字符串中搜索模式“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)

  • 你的第一个解决方案实际上被低估了 (3认同)