Ich habe die Ausgabe eines Befehls in tabellarischer Form. Ich analysiere diese Ausgabe aus einer Ergebnisdatei und speichere sie in einer Zeichenfolge. Jedes Element in einer Zeile wird durch ein oder mehrere Leerzeichen getrennt. Daher verwende ich reguläre Ausdrücke, um ein oder mehrere Leerzeichen abzugleichen und zu teilen. Zwischen jedem Element wird jedoch ein Leerzeichen eingefügt:
>>> 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!!!
Gibt es einen besseren Weg, dies zu tun?
Nach jedem Split str2
wird an eine Liste angehängt.
'str2'
str1.split()
. Keine Regex erforderlich.Antworten:
Wenn Sie
(
, verwenden)
, erfassen Sie die Gruppe. Wenn Sie sie einfach entfernen, tritt dieses Problem nicht auf.Es ist jedoch kein regulärer Ausdruck erforderlich,
str.split
ohne dass ein Trennzeichen angegeben wird, das für Sie durch Leerzeichen aufgeteilt wird. Dies wäre in diesem Fall der beste Weg.Wenn Sie wirklich Regex wollten, können Sie dies verwenden (
'\s'
stellt Leerzeichen dar und es ist klarer):oder Sie finden alle Nicht-Leerzeichen
quelle
str.split
ist definitiv das Beste: D['', 'a', 'b', 'c', 'de', '']
str1.split()
string.split()
ist eine Option. Ich habe gefragt, ob es auch mit Regex möglich ist.re.findall
Option nicht verwenden ?Die
str.split
Methode entfernt automatisch alle Leerzeichen zwischen Elementen:Dokumente finden Sie hier: http://docs.python.org/library/stdtypes.html#str.split
quelle
str.split()
wahrscheinlich die beste Wahl für etwas so Leichtes wie dieses.Wenn Sie verwenden
re.split
und das geteilte Muster Erfassungsgruppen enthält, bleiben die Gruppen in der Ausgabe erhalten. Wenn Sie dies nicht möchten, verwenden Sie stattdessen eine nicht erfassende Gruppe.quelle
str.split
ist wahrscheinlich besser für Ihr Beispiel. Ich wollte nur erklären, warum Sie das Verhalten bekommen, das Sie tun.Es ist eigentlich sehr einfach. Versuche dies:
quelle
stringToSplit.split()