2017-02-01 6 views
1

Ich muss Benutzernamen und IDs aus einer sehr großen Datei extrahieren. Ich benutze Python 2.7. Ich muss alles drucken, das nach username = oder prId = kommt und mit Anführungszeichen "" ist.Python Regex Muster passend

Eingang:

1. username="null null” 
2. username="test" 
3. username="test name" 
4. username="<unknown>" 
5. prId="tokenKeyUser" 

Die unten sollte angepasst werden:

null null 
test 
test name 
<unknown> 
tokenKeyUser 

Zur Zeit mache ich die folgenden:

re.search(r'username="(.*?)"', line) 
re.search(r'prId="(.*?)"', line) 

all dies ist in der Lage zu finden Muster außer Linie 1 und Linie 5.

Es ist nicht in der Lage zu finden: 1. „null null“ 2. ‚tokenKeyUser‘

Was mache ich hier falsch tun

+4

Zeile 1 scheint ein intelligentes Zitat zu haben, das den zitierten Teilstring beendet. – DavidO

+2

in der ersten Zeile sehe ich zwei verschiedene Zeichen '' und '" ' – furas

+0

... und der zweite passt für mich. Kann den Spielfehler nicht reproduzieren. – DavidO

Antwort

0

können Sie boolean verwenden, um einen regulären Ausdruck zu machen entsprechen alle Zeichen.

username="(.*?)["”]|prId="(.*?)" 

Gruppe 1 werden Benutzernamen übereinstimmen, und Gruppe 2 wird passen prid

+1

Das' | 'Zeichen innerhalb von Eine '[Zeichenklasse]' ist falsch. Das sagt der Regex-Engine, dass sie mit einem '" 'Zeichen oder einem' | 'Zeichen oder einem' "' Zeichen übereinstimmt. Das Zeichen '|' wird als Literalzeichen in Zeichenklassen behandelt, nicht als alternatives Metazeichen. Zeichenklassen sind implizit ein Zeichen breite Alternativen. – DavidO

+1

Danke, ich habe die Antwort bearbeitet. – Matts

0
for line in file: 
    for m in re.finditer(r'((?<=username=)|(?<=prId=))"([^"]+)["”]', line): 
    print(m.group(0)) 

null null” 
"test" 
"test name" 
"<unknown>" 
"tokenKeyUser" 

Ich dachte, ich würde einen Ansatz für die genaue Ausgabeanforderung bereitstellen.