如何计算字符串中指定单词的最长连续重复次数?
问题:识别字符串中单词最长连续重复次数
我想要编写一个函数,用于识别某个单词在字符串中最长连续重复的次数。目标字符串中“hi”的最长连续重复序列为5次,但以下代码输出为4,请问该如何修正?
原代码:
import re string = 'hihihihihibyebyebyehihihihibyebyebyehihi' print(len(max(re.compile('(hi+hi)*').findall(string))))
输出:4
解决方案
原代码错误原因
原正则表达式(hi+hi)*逻辑错误:hi+表示匹配h后跟1个或多个i(如hii、hiii),再拼接hi,这完全不是“连续重复的hi”的匹配逻辑,导致匹配到的子串长度计算错误。
修正方案
要匹配连续重复的hi,需用(?:hi)+(非捕获组,避免多余的捕获内容)来匹配一个或多个连续的hi。之后通过计算每个匹配子串的长度除以单个单词hi的长度(2),得到该子串中hi的重复次数,最后取最大值即可。
修正后的代码:
import re string = 'hihihihihibyebyebyehihihihibyebyebyehihi' # 找到所有连续的"hi"序列 matches = re.findall(r'(?:hi)+', string) # 计算每个序列中"hi"的重复次数,取最大值 max_repeat = max(len(match) // 2 for match in matches) print(max_repeat)
输出:5
另一种实现方式(更直观统计次数)
利用re.finditer遍历所有匹配结果,直接计算每个匹配的重复次数:
import re string = 'hihihihihibyebyebyehihihihibyebyebyehihi' max_count = 0 for match in re.finditer(r'(hi)+', string): current_count = len(match.group()) // 2 if current_count > max_count: max_count = current_count print(max_count)
输出:5
内容的提问来源于stack exchange,提问作者asdfghjkl
相关产品推荐
相关产品推荐

