检测字符串中的重复

时间:2012-01-31 12:49:56

标签: python regex

我有一个简单的问题,但不能提供一个简单的解决方案:)

假设我有一个字符串。我想检测一下是否有重复。

我想:

"blablabla" # => (bla, 3)

"rablabla"  # => (bla, 2)

事情是我不知道我正在寻找什么模式(我没有“bla”作为输入)。

有什么想法吗?

修改
看到这些评论,我想我应该更多地考虑一下我的想法:

  • 在字符串中,存在重复或不重复的模式。
  • 重复的图案可以是任何长度。

如果有模式,它将一遍又一遍地重复直到结束。但是字符串可以在模式的中间结束。

示例:

"testblblblblb" # => ("bl",4) 

1 个答案:

答案 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)]