我有一个简单的问题,但不能带一个简单的解决方案:)
假设我有一个字符串.我想检测一下是否有重复.
我想要:
"blablabla" # => (bla, 3)
"rablabla" # => (bla, 2)
Run Code Online (Sandbox Code Playgroud)
问题是我不知道我要搜索的模式(我没有"bla"作为输入).
任何的想法?
编辑:
看到评论,我想我应该更多地考虑我的想法:
如果有一个模式,它将一遍又一遍地重复,直到结束.但是字符串可以在模式的中间结束.
例:
"testblblblblb" # => ("bl",4)
Run Code Online (Sandbox Code Playgroud)
Tim*_*ker 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)))
Run Code Online (Sandbox Code Playgroud)
使用最短的重复单位找到所有非重叠的重复匹配:
>>> list(repetitions("blablabla"))
[('bla', 3)]
>>> list(repetitions("rablabla"))
[('abl', 2)]
>>> list(repetitions("aaaaa"))
[('a', 5)]
>>> list(repetitions("aaaaablablabla"))
[('a', 5), ('bla', 3)]
Run Code Online (Sandbox Code Playgroud)