¿La expresión regular de Python encuentra todas las coincidencias superpuestas?

Estoy tratando de encontrar cada serie de números de 10 dígitos dentro de una serie más grande de números usando re en Python 2.6.

Fácilmente puedo capturar coincidencias sin superposición, pero quiero todas las coincidencias en la serie de números. P.ej.

en “123456789123456789”

Debería obtener la siguiente lista:

[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789] 

He encontrado referencias a un “lookahead”, pero los ejemplos que he visto solo muestran pares de números en lugar de grupos más grandes y no he podido convertirlos más allá de los dos dígitos.

    Utilice un grupo de captura dentro de un lookahead. El lookahead captura el texto en el que está interesado, pero la coincidencia real es técnicamente la subcadena de ancho cero antes del lookahead, por lo que las coincidencias son técnicamente no superpuestas:

     import re s = "123456789123456789" matches = re.finditer(r'(?=(\d{10}))',s) results = [int(match.group(1)) for match in matches] # results: # [1234567891, # 2345678912, # 3456789123, # 4567891234, # 5678912345, # 6789123456, # 7891234567, # 8912345678, # 9123456789] 

    También puede intentar usar el módulo de regex terceros (no re ), que admite coincidencias superpuestas.

     >>> import regex as re >>> s = "123456789123456789" >>> matches = re.findall(r'\d{10}', s, overlapped=True) >>> for match in matches: print match ... 1234567891 2345678912 3456789123 4567891234 5678912345 6789123456 7891234567 8912345678 9123456789 

    Me gustan las expresiones regulares, pero no son necesarias aquí.

    Simplemente

     s = "123456789123456789" n = 10 li = [ s[i:i+n] for i in xrange(len(s)-n+1) ] print '\n'.join(li) 

    resultado

     1234567891 2345678912 3456789123 4567891234 5678912345 6789123456 7891234567 8912345678 9123456789