Python split string basado en condicional

Quiero dividir cadenas utilizando un delimitador de coma si la coma está precedida por una expresión regular determinada. Considere el caso donde mis cadenas están en el formato: “(grupo de cosas que pueden tener comas) FOO_REGEX, (otras cosas que podrían tener comas) FOO_REGEX, …” y quiero dividir la cadena en comas, pero solo si están precedidos por FOO_REGEX: [“(grupo de cosas que pueden tener comas) FOO_REGEX”, “(otras cosas que pueden tener comas) FOO_REGEX”, tc.].

Como ejemplo concreto, considera dividir la siguiente cadena:

"hi, hello! $$asdf, I am foo, bar $$jkl, cool" 

en esta lista de tres cadenas:

 ["hi, hello! $$asdf", "I am foo, bar $$jkl", "cool"] 

¿Hay alguna manera fácil de hacer esto en python?

Podría usar re.findall lugar de re.split .

 >>> import re >>> s = "hi, hello! $$asdf, I am foo, bar $$jkl, cool" >>> [j for i in re.findall(r'(.*?\$\$[^,]*),\s*|(.+)', s) for j in i if j] ['hi, hello! $$asdf', 'I am foo, bar $$jkl', 'cool'] 

O

Use el módulo de regex externa para admitir la longitud variable, ya que re no admitirá las afirmaciones de longitud variable de la retrospectiva.

 >>> import regex >>> s = "hi, hello! $$asdf, I am foo, bar $$jkl, cool" >>> regex.split(r'(?<=\$\$[^,]*),\s*', s) ['hi, hello! $$asdf', 'I am foo, bar $$jkl', 'cool'] 

Puede usar un look-behind positivo si el FOO_REGEX es de ancho fijo. Aquí, obtendrá su línea dividida después de “$$ asdf”

Ver un progtwig de trabajo de muestra :

 import re str = 'hi, hello! $$asdf, I am foo, bar $$jkl, cool' splts = re.split('(?<=\$\$asdf), *', str) print splts 

Salida:

 ['hi, hello! $$asdf', 'I am foo, bar $$jkl, cool']