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 str2se 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.splitsin 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.splites 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.findallopción?El
str.splitmé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.splity 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.splites 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()