2016-06-27 2 views
1

Ich habe eine Zeichenfolge wie folgt strukturiert:Wie eine Zeichenfolge durch Registerkarten aufgeteilt, sondern nur einmal pro Auftreten

"I\thave\ta\t\tstring" 

Und um durch Registerkarten aufgeteilt ich diese Methode verwendet:

text = [splits for splits in row.split("\t") if splits is not ""] 

diese jetzt Methode entfernt alle Registerkarten aus der Zeichenfolge, aber ich möchte, dass es nur das erste Vorkommen einer Registerkarte nach einem Wort entfernt, damit es so enden würde:

"Ihavea\tstring" 

Gibt es eine Möglichkeit, dies zu tun?

Antwort

2

re.split auf einen negativen Blick hinter Behauptung Verwendung tun sollten:

import re 

s = ''.join(re.split(r'(?<!\t)\t', row)) 
print(s) 
# 'Ihavea\tstring' 

Die Behauptung (?<!\t) verhindert eine Spaltung auf einem \t, die von einem anderen \t voraus.

können Sie re.sub verwenden, wenn Sie nicht wirklich tun müssen, die Elemente aus dem Split:

s = re.sub(r'(?<!\t)\t', '', row) 
print(s) 
# 'Ihavea\tstring' 
+0

Funktioniert perfekt, danke! –

1

es einfach zu halten Sie re.split

from re import split 
text = "I\thave\ta\t\tstring" 
split_string = split(r'\t+', text) #Gives ['I', 'have', 'a', 'string'] 

Den regulären Ausdruck r'\t+' im Grunde nur Gruppen alle verwenden können aufeinander folgende Tabs zusammen.

+0

Beachten Sie, dass dies ausschließlich zum Aufteilen einer Saite dient. Du kannst sie einfach wieder zusammenfügen mit "" .join (split_string) ' –

+0

Ich gebe zu, dass @MosesKoledoye eine bessere Antwort hat, weil meine Antwort nur alle Tabs entfernen wird, die auf sie spalten, wo er eins behält, wenn es mehrere gibt. –

2

Liste Verständnis ist auch ein Weg zu gehen, wenn Sie das Modul re importieren vermeiden wollen:

row = "I\thave\ta\t\tstring" 
text = [splits if splits else "\t" for splits in row.split("\t")] 
"".join(text) 
#'Ihavea\tstring' 

Eine leere Zeichenfolge ist in einem Booleschen Kontext falsch und leere Listenelemente werden für jede aufeinanderfolgende Spaltung erzeugt werden -char ("\ t" in diesem Fall)

Verwandte Themen