2017-03-29 5 views
0

Wie kann ich alles mit Sonderzeichen zwischen genau 3 Leerzeichen auf der linken Seite und genau 3 Leerzeichen auf der rechten Seite eines Doppelpunkts übereinstimmen? Beispiel, das mit W als Leerraum bezeichnet wird.Pandas Regex alle Elemente zwischen zwei Sätze von Leerzeichen

Beispiel match:

\\s\\s\\sdata\\sstuff:\\s\\sfound\\ssome([%$)Data\\sas\\swhiteSpace\\s\\s\\s 
    data stuff: found some([%$)Data as whiteSpace 

Beispiel Nicht-Übereinstimmungs:

\\s\\sdata\sstuff:\\s\\sfound\\sno\\sdatacause\\sno\\s3\\sspaces\\sbefore\\sor\\safter\\s\\s 
    data stuff: found no datacause no 3 spaces before or after 

Die Absicht ist es, dies zu separaten Spalten aus einer einzigen Spalte eines Pandas Datenrahmen zu erweitern.

Erwarteter Ausgang:

data stuff        data stuff 2 
found some([%$)Data as whiteSpace   if i had more examples for data stuff 2 it would show here 
extra random data to add into a outputdf if i had more examples for data stuff 2 it would show here 

Ursprünglicher Gedanke war, so etwas zu verwenden, aber dieses nicht ganz funktioniert.

"(\\s\\s\\s(.*?)\\:\\s\\s(.*?)\\s\\s\\s)" 
+0

Können Sie klären, welche Zeichen Sie übereinstimmen möchten? – jonathanking

+0

Ich muss jedes mögliche Zeichen zwischen genau 3 weißen Räumen zusammenbringen – johnnyb

Antwort

1

Betrachten Sie diese df

col 
0 data stuff: found some([%$)Data as whiteSpace 1 

Regex1:

df.col.str.extract(':\\s{3}(.*)\s{3}') 

zurückkehren würde

0 found some([%$)Data as whiteSpace 
Name: col, dtype: object 

, dass der Gehalt zwischen drei weißen Räumen ist vor gefunden und drei weißen Räumen bei Th e beenden, bevor 1.

Wo, wie

df.col.str.extract(':\\s{3}(.*?)\s{3}') #note the ? after .* 

0 found 
Name: col, dtype: object 

zurückkehren wird, dass der Inhalt zwischen der ersten und zweiten Instanz von drei weißen Räumen ist.

Wenn Sie mehr Testfälle bereitstellen, wird klar, was Sie sonst noch von der Regex brauchen.

0
(?:^|[^ ]) (.*?) (?:$|[^ ]) 

Break it down!

  • (?:^|[^ ]) - alles passt, die entweder ist nicht ein Raum oder ist der Anfang einer Zeile
  • x (.*?) x Spiel alles, was hinzugefügt zwischen 3 Räume auf beiden Seiten (xs ist so Räume verschwinden nicht)
  • (?:$|[^ ]) Spiel alles, was nicht ein Raum oder ist am Ende einer Zeile

Example in regexr

Verwandte Themen