检测字符串中的重复

2024-05-16 19:54:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

假设我有一根绳子。我想知道里面是否有重复。

我想:

"blablabla" # => (bla, 3)

"rablabla"  # => (bla, 2)

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

知道吗?

编辑:
看到这些评论,我想我应该更准确地说出我的想法:

  • 在一个字符串中,要么有一个模式被排斥,要么没有。
  • 重复的图案可以是任意长度。

如果有一个模式,它会被一次又一次地排斥直到结束。但是字符串可以在模式的中间结束。

示例:

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

Tags: 字符串编辑示例模式评论解决方案图案bla
1条回答
网友
1楼 · 发布于 2024-05-16 19:54:16
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)]

相关问题 更多 >