how - replace python
Dividir por coma y quitar espacios en blanco en Python (11)
Dividir utilizando una expresión regular. Note que hice el caso más general con espacios iniciales. La lista de comprensión es eliminar las cadenas nulas en la parte delantera y trasera.
>>> import re
>>> string = " blah, lots , of , spaces, here "
>>> pattern = re.compile("^/s+|/s*,/s*|/s+$")
>>> print([x for x in pattern.split(string) if x])
[''blah'', ''lots'', ''of'', ''spaces'', ''here'']
Esto funciona incluso si ^/s+
no coincide:
>>> string = "foo, bar "
>>> print([x for x in pattern.split(string) if x])
[''foo'', ''bar'']
>>>
Aquí es por qué necesitas ^ / s +:
>>> pattern = re.compile("/s*,/s*|/s+$")
>>> print([x for x in pattern.split(string) if x])
['' blah'', ''lots'', ''of'', ''spaces'', ''here'']
¿Ves los espacios punteros en bla?
Aclaración: arriba utiliza el intérprete de Python 3, pero los resultados son los mismos en Python 2.
Tengo algún código de Python que se divide en coma, pero no quita el espacio en blanco:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split('','')
>>> print mylist
[''blah'', '' lots '', '' of '', '' spaces'', '' here '']
Preferiría terminar con el espacio en blanco eliminado de esta manera:
[''blah'', ''lots'', ''of'', ''spaces'', ''here'']
Soy consciente de que podría recorrer la lista y eliminar () cada elemento pero, como esto es Python, supongo que hay una forma más rápida, fácil y elegante de hacerlo.
Sé que esto ya ha sido respondido, pero si terminas haciendo esto mucho, las expresiones regulares pueden ser una mejor manera de hacerlo:
>>> import re
>>> re.sub(r''/s'', '''', string).split('','')
[''blah'', ''lots'', ''of'', ''spaces'', ''here'']
/s
coincide con cualquier carácter de espacio en blanco, y simplemente lo reemplazamos con una cadena vacía ''''
. Puede encontrar más información aquí: http://docs.python.org/library/re.html#re.sub
Simplemente quite el espacio en blanco de la cadena antes de dividirla.
mylist = my_string.replace('' '','''').split('','')
Utilice la comprensión de listas: más simple y tan fácil de leer como un bucle for
.
my_string = "blah, lots , of , spaces, here "
[x.strip() for x in my_string.split('','')]
Ver: documentos de Python en la comprensión de la lista
Una buena explicación de 2 segundos de la lista de comprensión.
Vine a añadir:
map(str.strip, string.split('',''))
pero vio que ya había sido mencionado por Jason Orendorff en un comentario .
Leyendo el comentario de Glenn Maynard en la misma respuesta, sugiriendo listas de comprensión sobre el mapa, comencé a preguntarme por qué. Supuse que quería decir por motivos de rendimiento, pero, por supuesto, podría haberlo hecho por motivos estilísticos, o algo más (¿Glenn?).
Así que una prueba rápida (¿posiblemente defectuosa?) En mi caja aplicando los tres métodos en un bucle reveló:
[word.strip() for word in string.split('','')]
$ time ./list_comprehension.py
real 0m22.876s
map(lambda s: s.strip(), string.split('',''))
$ time ./map_with_lambda.py
real 0m25.736s
map(str.strip, string.split('',''))
$ time ./map_with_str.strip.py
real 0m19.428s
haciendo del map(str.strip, string.split('',''))
el ganador, aunque parece que todos están en el mismo estadio.
Ciertamente, aunque el mapa (con o sin un lambda) no necesariamente debe descartarse por razones de rendimiento, y para mí es al menos tan claro como una lista de comprensión.
Editar:
Python 2.6.5 en Ubuntu 10.04
map(lambda s: s.strip(), mylist)
sería un poco mejor que el bucle explícito. O para todo al mismo tiempo: map(lambda s:s.strip(), string.split('',''))
map(lambda s: s.strip(), mylist)
sería un poco mejor que el bucle explícito.
O para todo el asunto a la vez:
map(lambda s:s.strip(), string.split('',''))
Eso es básicamente todo lo que necesitas.
re
(como en expresiones regulares) permite dividir en varios caracteres a la vez:
$ string = "blah, lots , of , spaces, here "
$ re.split('', '',string)
[''blah'', ''lots '', '' of '', '' spaces'', ''here '']
Esto no funciona bien para su cadena de ejemplo, pero funciona bien para una lista separada por espacios de coma. Para su cadena de ejemplo, puede combinar la potencia de división de división para dividir en patrones de expresiones regulares para obtener un efecto de "dividir en esto o aquello".
$ re.split(''[, ]'',string)
[''blah'',
'''',
''lots'',
'''',
'''',
'''',
'''',
''of'',
'''',
'''',
'''',
''spaces'',
'''',
''here'',
'''']
Desafortunadamente, eso es feo, pero un filter
hará el truco:
$ filter(None, re.split(''[, ]'',string))
[''blah'', ''lots'', ''of'', ''spaces'', ''here'']
Voila!
import re
mylist = [x for x in re.compile(''/s*[,|/s+]/s*'').split(string)
Simplemente, coma o al menos un espacio en blanco con / sin espacios en blanco anteriores o posteriores.
¡Por favor, inténtalo!
import re
result=[x for x in re.split('',| '',your_string) if x!='''']
Esto funciona bien para mi.
s = ''bla, buu, jii''
sp = []
sp = s.split('','')
for st in sp:
print st