¿No dividir las palabras entre comillas dobles con Python string split ()?

Cuando se utiliza la función de cadena de Python split (), ¿alguien tiene un truco ingenioso para tratar los elementos rodeados por comillas dobles como una palabra que no se divide?

Digamos que quiero dividir solo en espacios en blanco y tengo esto:

>>> myStr = 'AB\t"C" DE "FE"\t\t"GH I JK L" "" ""\t"OPQ" R' >>> myStr.split() ['A', 'B', '"C"', 'DE', '"FE"', '"GH', 'I', 'JK', 'L"', '""', '""', '"O', 'P', 'Q"', 'R'] 

Me gustaría tratar cualquier cosa entre comillas dobles como una sola palabra, incluso si los espacios en blanco están incrustados, por lo que me gustaría terminar con lo siguiente:

 ['A', 'B', 'C', 'DE', 'FE', 'GH I JK L', '', '', 'OP Q', 'R'] 

O al menos esto y luego quitaré las comillas dobles:

 ['A', 'B', '"C"', 'DE', '"FE"', '"GH I JK L"', '""', '""', '"OPQ"', 'R'] 

¿Alguna sugerencia no regex?

No podrá obtener este comportamiento con str.split() . Si puede vivir con el análisis bastante complejo que hace (como ignorar las comillas dobles precedidas por una barra diagonal shlex.split() ), shlex.split() podría ser lo que está buscando:

 >>> shlex.split(myStr) ['A', 'B', 'C', 'DE', 'FE', 'GH I JK L', '', '', 'OP Q', 'R'] 

@Rob: ¿por qué sin regexes si la solución de regexp es tan simple?

 my_str = 'AB\t"C" DE "FE"\t\t"GH I JK L" "" ""\t"OPQ" R' print re.findall(r'(\w+|".*?")', my_str) ['A', 'B', '"C"', 'DE', '"FE"', '"GH I JK L"', '""', '""', '"OPQ"', 'R'] 

Le sugiero que busque con re el patrón “[^”] * “y aplique string.split solo en las partes restantes. Podría implementar una función recursiva que procese todas las partes de cadena relevantes.