Sie versuchen, Ihren Text nach dem Muster "\s{2,}
" zu teilen.
So in Python, die Regex lib re
geben Sie alle benötigten Werkzeuge:
import re
line = "IP Address Name Location Type"
result = re.split('\s{2,}',line)
Welche gibt:
['IP Address', 'Name', 'Location', 'Type']
EDIT
Ich denke, ich ein wenig verstanden mehr Ihre Frage: Sie kümmern sich mehr darum, eine Sequenz zwischen \s{2,}
zu isolieren, als sie zu trennen. In Ihrem Beispiel scheint jedoch die obige Lösung am besten geeignet zu sein.
fragte Sie für einen regulären Ausdruck, hier ist es:
reg1 = "[^\s](?!\s{2,})(?:.(?!\s{2,}))*[^\s]"
- Er wählt zunächst einen Charakter, der mit
[^\s](?!\s{2,})
nicht gefolgt von zwei Leerzeichen oder mehr kein Raum ist. Um dies zu tun, habe ich die negative Lookahead Assertion (?!...)
;
- Dann isoliert es eine Gruppe
(?:...)
, die auf diese Weise zusammengesetzt ist: irgendein Zeichen .
, dem \s{2,}
nicht folgt;
- Wiederholen mit
*
;
- Es passiert, dass das letzte Zeichen nicht ausgewählt ist, wenn wir jetzt aufhören. Also sollten wir noch eins
[^\s]
hinzufügen.
Eine re.findall(reg1,line)
, und Sie sollten fertig sein. Ein Nachteil vielleicht: es erkennt Sequenzen, die mindestens zwei Zeichen lang sind.
In diesem Fall könnte ein anderer und einfacherer Regex den Job schließlich abschließen: reg2 = "\s{2,}([^\s])\s{2,}"
. Es wählt einzelne Nicht-Leerzeichen aus, die von zwei oder mehr Leerzeichen umgeben sind.Die Verwendung der Klammer (...)
bewirkt, dass nur das Zeichen zurückgegeben wird.
By the way, rate ich dringend einen Blick auf die Dokumentation: https://docs.python.org/2/library/re.html
Hoffnung gefunden was Sie für :-)
suchen Was ist das Problem? Wie machst du das genau? –
Was Regex Geschmack? Was ist ein Wort für dich? Warum fehlt ein Leerzeichen in der "IP-Adresse" der ersten Zeile? Ist "Santa Monica, CA" ab der 3. Zeile ein einzelnes Match mit einem Komma oder zwei separaten Matches? Warum nicht einen Textparser mit fester Breite verwenden? – Aaron
Split auf 2 oder mehr Leerzeichen. – Toto