Una peculiaridad particular de la (por lo demás bastante potente) re
módulo en Python es que re.split()
will never split a string on a zero-length match, por ejemplo si quiero dividir una cadena a lo largo de los límites de palabra:¿Por qué Python's `re.split()` no se divide en coincidencias de longitud cero?
>>> re.split(r"\s+|\b", "Split along words, preserve punctuation!")
['Split', 'along', 'words,', 'preserve', 'punctuation!']
en lugar de
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']
¿Por qué tiene esta limitación? ¿Es por diseño? ¿Se comportan así otros sabores regex?
Gracias por los enlaces, de la solución. Realmente creo que deberían tomar la sugerencia de la BDFL y agregar una bandera para esto. –
Esta es una decisión de diseño realmente cojo. Los RE son algo en lo que las decisiones de diseño NO DEBEN ser impulsadas por lo que la gente "espera" porque muchas cosas sobre RE no están en línea con las "expectativas" de las personas, sea lo que sea que eso signifique de todos modos. 'x *' debe coincidir con '' abc'' porque eso es lo que dice el RE: "hacer coincidir una x, cero o más veces". Eso es lo que obtienes cuando usas '*'. –
Acabo de toparme con este problema al intentar dividir un nombre de variable de caso pascal ('re.split ('(? <= [A-z]) (? = [A-Z])', name)'). Demasiado. – Blixt