2017-05-21 6 views
0

die Zeile mit folgenden Struktur Parsing:Ausgabe in Splitting regex

positive-number str1 "str2" "str3" "str4" 

Die obige Linie sollte in einzelnen Teil aufgeteilt werden. str2, str3, str4 [könnte "\" \ "\" - Anführungszeichen haben.].

Ich verwende die folgende Regex, um die Zeilen zu teilen. Dem Vorschlag von diesem Link folgend. Es wird jedoch bestimmte lines nicht extrahiert.

Inhalt von Dateien, aus denen Muster extrahiert werden:

8 2016-06-10-17:53:22 "Str1" "Value" "Str3" 
8 2016-06-10-17:53:22 "Str1" "Value2" "Str3" 
9 2016-06-10-17:53:22 "asd" "asd" "ads" 
7 2016-06-10-17:53:22 “A quoted ” “do about.” “care\” \” quotes. ” 

Regex verwendet:

with open('sample.txt') as f: 
    for l in f: 
     res = re.search('(.*?) (.*?) “(.*?)” “(.*?)” “(.*?)”', l.replace('\n', '')) 

jedoch in der Ausgabe wird nur die Zeile mit dem Wert beginnend 7 aufgeteilt korrekt und andere Leitungen aren t.

+0

Bedeutet es, dass Sie '\\" in Ihren Strings haben können, das bedeutet einen Backslash und einen unscaped ''? Sind Ihre Angebote auch inkonsistent wie in den obigen Demo-Daten? –

+0

Tipp: alle Ihre Fragezeichen in Ihrem Regex ist nicht notwendig – abccd

+2

Es ist komisch, dass Sie jemand anderen [Regex] (http://stackoverflow.com/a/44099276/6622817) und immer noch nicht akzeptieren, dass diese Antwort – abccd

Antwort

0

In Ihrem Text gibt es einige doppelte Anführungszeichen (") und einige doppelte Anführungszeichen ( und ). Aus diesem Grund erkennt die Regex die ersten drei nicht.

Wenn Sie nur doppelte Anführungszeichen verwenden, Ihre Regex arbeitet für die ersten drei: https://regex101.com/r/1zjCOn/1

Es ist nicht auf der vierten wegen Flucht Probleme funktioniert.