2016-08-31 8 views
0

Ich bin ein totaler Anfänger, Kodieren zum ersten Mal und versuchen zu lernen, indem Sie tun. Ich verwende diese:Wie bekomme ich "saubere" Treffer in Python

import re 
f = open('aaa.txt', 'r') 
string=f.read() 
c = re.findall(r"Guest last name: (.*)", string) 
print "Dear Mr.", c 

die

Dear Mr. ['XXXX'] 

ich wieder frage mich, ist es eine Möglichkeit, das Ergebnis wie

Dear Mr. XXXX 

statt zu bekommen?

Vielen Dank im Voraus.

+0

Ist das wahr, dass Sie nur einen Namen bis zum Ende der Zeile haben? Ich würde etwas wie '\ S +' anstelle von '. *' - 'r" Gast Nachname: (\ S +) "' verwenden. Oder '\ S *' wenn es leer sein kann. Überprüfen Sie das Ergebnis vor der Verwendung. –

+0

Jedes Mal, wenn etwas zurückgibt ['etwas'], bedeutet dies, dass es in einem Array ist und Sie müssen darauf zugreifen mit [n] wobei n die Position des Elements im Array ist. –

+0

Glücklicherweise hat das exportierte Dokument, das ich in Python lese, 1 String pro Zeile, also habe ich eine sehr einfache Zeit mit Regex. Jedoch werde ich immer noch versuchen, es genauer zu machen, sowohl für den eigentlichen Code als auch um Regex zu lernen. –

Antwort

0

Sie müssen den ersten Eintrag in der Liste nehmen

print "Dear Mr.", c[0] 
0

Ja verwenden re.search wenn Sie nur ein Spiel erwarten:

re.search(r"Guest last name: (.*)", string).group(1)` 

findall ist, wenn Sie mehrere Matches erwarten. Sie möchten wahrscheinlich auch ? zu Ihrem Regex (.*?) für eine nicht gierige Aufnahme hinzufügen, aber Sie möchten wahrscheinlich auch etwas genauer sein und bis zum nächsten möglichen Zeichen nach dem gewünschten Namen/Ausdruck aufnehmen.

+0

Danke, ich werde in komplexere Regexes schauen, denn jetzt baue ich nur das Skelett! Ich habe versucht, re.search, aber es gibt "<_sre.SRE_Match Objekt bei 0x000000000361DBE8>". Ich denke, das bedeutet, dass es eine Übereinstimmung gefunden hat und wo die Übereinstimmung ist, aber ich brauche die tatsächliche Übereinstimmung in meiner Ausgabe :) –

Verwandte Themen