我有一个简单的问题,但不能提供一个简单的解决方案:)
假设我有一个字符串。我想检测一下是否有重复。
我想:
"blablabla" # => (bla, 3)
"rablabla" # => (bla, 2)
事情是我不知道我正在寻找什么模式(我没有“bla”作为输入)。
有什么想法吗?
修改
看到这些评论,我想我应该更多地考虑一下我的想法:
如果有模式,它将一遍又一遍地重复直到结束。但是字符串可以在模式的中间结束。
示例:
"testblblblblb" # => ("bl",4)
答案 0 :(得分:40)
import re
def repetitions(s):
r = re.compile(r"(.+?)\1+")
for match in r.finditer(s):
yield (match.group(1), len(match.group(0))/len(match.group(1)))
使用尽可能短的重复单位找到所有非重叠的重复匹配:
>>> list(repetitions("blablabla"))
[('bla', 3)]
>>> list(repetitions("rablabla"))
[('abl', 2)]
>>> list(repetitions("aaaaa"))
[('a', 5)]
>>> list(repetitions("aaaaablablabla"))
[('a', 5), ('bla', 3)]