python - valor - Detectar repeticiones en cuerda.
python quitar duplicados (1)
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)))
encuentra todas las coincidencias de repetición no superpuestas, utilizando la unidad de repetición más corta posible:
>>> list(repetitions("blablabla"))
[(''bla'', 3)]
>>> list(repetitions("rablabla"))
[(''abl'', 2)]
>>> list(repetitions("aaaaa"))
[(''a'', 5)]
>>> list(repetitions("aaaaablablabla"))
[(''a'', 5), (''bla'', 3)]
Tengo un problema simple, pero no puedo venir con una solución simple :)
Digamos que tengo una cuerda. Quiero detectar si hay una repetición en ella.
Me gustaría:
"blablabla" # => (bla, 3)
"rablabla" # => (bla, 2)
La cosa es que no sé qué patrón estoy buscando (no tengo "bla" como entrada).
¿Alguna idea?
EDITAR:
Viendo los comentarios, creo que debo precisar un poco más de lo que tengo en mente:
- En una cadena, hay un patrón que se repite o no.
- El patrón repetido puede ser de cualquier longitud.
Si hay un patrón, se repetirá una y otra vez hasta el final. Pero la cadena puede terminar en el medio del patrón.
Ejemplo:
"testblblblblb" # => ("bl",4)