2016-11-28 4 views
-1

Mein Ziel ist es, die Übereinstimmungen Zeile für Zeile aus einer Textdatei auszudrucken, die meinem regulären Ausdruck entspricht. In meiner Datei regexprc.txt sind alle möglichen Dinge drin, aber ich möchte ein einfaches Programm schreiben, das nur Namen aus dieser Datei abgleicht und jedes einzelne Zeile für Zeile ausdruckt.Python 3: Nennen Sie Namen aus einer Textdatei und drucken Sie sie Zeile für Zeile aus

Die Regel ist: Zeilen, die einen Vor- und Nachnamen mit einem optionalen zweiten Vornamen haben, alle durch ein Leerzeichen voneinander getrennt, jeder Anfangsbuchstabe muss groß geschrieben werden, und jeder alphabetische Name ist als Name zulässig. Also sollte es John Smith, John Lee Smith, AB, ABC, Abc Def Z entsprechen. Es sollte nicht übereinstimmen John Smith, ein Z, Ab Cd EE, ABC D.

Leider brauche ich etwas Hilfe dabei, wie ich ' m neu in Python 3. Hier ist, was ich bisher versucht:

import re 

file_read = open("regexprc.txt", "r") 
#match names 
ptr = '^([A-Z][a-z]*\s){1,2}([A-Z][a-z]*)?$' 

for line in file_read: 
    a = re.search(ptr, line) 
    print(a) 

Dieser Code nur eine Menge None Aussagen druckt zusammen mit einigen Nachrichten, die wie folgt aussehen:

<_sre.SRE_Match object; span=(0, 4), match='A B\n'>. 

wieder einmal möchte ich es einfach um die Namen Zeile für Zeile in regexprc.txt auszudrucken.

+1

Ich empfehle dringend, dass Sie die Dokumentation für 're.search' lesen, um zu sehen, was es zurückgibt. Es ist klar * klar * dort ausgesprochen. Es gibt keinen Grund, dies auf SO zu stellen, da jede richtige Antwort nur eine Neuaufbereitung dieser Dokumente sein wird. –

+0

Verwenden Sie 'a = re.search (ptr, line)' und dann 'if a:' // 'print (a.group())' –

+0

Ihre Regex ist etwas restriktiver als Ihre Kriterien. Sollte Ihre Regex die Zeichenfolge 'Liam MacDonald' akzeptieren? –

Antwort

0
import re 

ptr = r'your_regular_expression' 

with open('your_file_name', 'r') as file: 
    for line in file: 
     for match in re.finditer(ptr, line): 
      print(match.group()) 

Dadurch werden alle Spiele innerhalb jeder Zeile und ausdrucken „Gruppe 0“ finden (das heißt, der gesamte Text, angepasst) für jeden von ihnen.

Die with-Anweisung kümmert sich auch darum, die Datei für Sie zu schließen, daher ist es ratsam, sie generell zu verwenden.

Verwandte Themen