Dividir una cadena en python

Tengo una cadena de python de la siguiente manera

mystring = "copy "d:\Progrm Files" "c:\Progrm Files\once up on a time""

¿Cómo puedo dividir esta cadena para

mylist = [copy,d:\Progrm Files,c:\Progrm Files\once up on a time]

Cuando traté de usar mysring.split(" ") los espacios Progrm Files y once up on a time también se están dividiendo.

preguntado el 31 de julio de 12 a las 10:07

Tendrás que usar una expresión regular para dividir -

Sus ejemplos son python inválidos; comillas dentro de comillas y escapes de barra invertida. -

Ahora su código no es válido en un contexto de shell; el shell interpretará los espacios de la misma manera y no interpretará correctamente el comando. -

Hola, Martijn, estoy recibiendo el error "No cerrar cotización". -

Tu cita todavía está bastante estropeada; necesita verificar dos veces que su mystring se cita correctamente tanto para python como para el shell. Compare el ejemplo dado en mi respuesta con su propio código. -

2 Respuestas

Quieres echar un vistazo a la shlex módulo, el shell lexer. Se especializa en dividir líneas de comando como la suya en sus constituyentes, incluido el manejo correcto de las comillas.

>>> import shlex
>>> command = r'copy "d:\Program Files" "c:\Program Files\once up on a time"'
>>> shlex.split(command)
['copy', 'd:\\Program Files', 'c:\\Program Files\\once up on a time']

Respondido 31 Jul 12, 10:07

esta expresión regular captura lo que quieres:

import re

mystring = "copy \"d:\Progrm Files\" \"c:\Progrm Files\once up on a time\""

m = re.search(r'([\w]*) ["]?([[\w]:\\[\w\\ ]+)*["]? ["]?([[\w]:\\[\w\\ ]+)*["]?', mystring)

print m.group(1)
print m.group(2)
print m.group(3)

>>> 
copy
d:\Progrm Files
c:\Progrm Files\once up on a time

Respondido 31 Jul 12, 10:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.