Tengo la salida de un comando en forma de tabla. Estoy analizando esta salida de un archivo de resultados y la guardo en una cadena. Cada elemento en una fila está separado por uno o más caracteres de espacio en blanco, por lo tanto, estoy usando expresiones regulares para unir 1 o más espacios y dividirlo. Sin embargo, se inserta un espacio entre cada elemento:
>>> str1="a b c d" # spaces are irregular
>>> str1
'a b c d'
>>> str2=re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!!
¿Hay una mejor manera de hacer esto?
Después de cada división str2
se agrega a una lista.
'str2'
str1.split()
. No hay necesidad de una expresión regular.Respuestas:
Al usar
(
,)
está capturando el grupo, si simplemente los elimina, no tendrá este problema.Sin embargo, no hay necesidad de expresiones regulares,
str.split
sin ningún delimitador especificado se dividirá esto por espacios en blanco para usted. Esta sería la mejor manera en este caso.Si realmente quería expresiones regulares, puede usar esto (
'\s'
representa espacios en blanco y es más claro):o puedes encontrar todos los caracteres que no sean espacios en blanco
fuente
str.split
es definitivamente el mejor: D['', 'a', 'b', 'c', 'de', '']
str1.split()
string.split()
es una opción. ¿Estaba preguntando si se podría hacer con regex también?re.findall
opción?El
str.split
método eliminará automáticamente todo el espacio en blanco entre los elementos:Los documentos están aquí: http://docs.python.org/library/stdtypes.html#str.split
fuente
str.split()
es probablemente la mejor opción para algo tan liviano como esto.Cuando utiliza
re.split
y el patrón dividido contiene grupos de captura, los grupos se retienen en la salida. Si no quiere esto, use un grupo que no sea de captura en su lugar.fuente
str.split
es probablemente mejor para su ejemplo. Solo quería explicar por qué obtienes el comportamiento que haces.Es muy simple en realidad. Prueba esto:
fuente
stringToSplit.split()