Estaba tratando de responder esta pregunta donde el OP tiene la siguiente cadena:
"path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism"
Y quiere dividirlo para obtener la siguiente lista:
['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism']
Intenté resolverlo utilizando una aserción simple de búsqueda anticipada en una expresión regular, (?=path:)
. Bueno, no funcionó:
>>> s = "path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism" >>> r = re.compile('(?=path:)') >>> r.split(s) ['path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism']
Sin embargo, en esta respuesta , el respondedor lo puso en funcionamiento precediendo la afirmación de búsqueda anticipada con un espacio en blanco:
>>> line = 'path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism' >>> re.split(' (?=path:)', line) ['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism']
¿Por qué funcionó la expresión regular con los espacios en blanco? ¿Por qué no funcionó sin el espacio en blanco?
re.split()
Python tiene una limitación documentada : no se puede dividir en coincidencias de longitud cero. Por lo tanto la división solo funcionó con el espacio agregado.