Dieses einfache Problem ist mich zu töten. Ich habe vorher etwas über den Versuch gepostet, eine Datenbank mit Adressen zu bereinigen, und jemand schlug GeoPy vor, die Gültigkeit der Adressen zu überprüfen. Tolles Tool, das ich nicht kannte, aber bevor ich das mache, muss ich die Datenbank ein wenig aufräumen, da geopy sich nicht um unordentliche Formatierungen kümmert. Die Lösung besteht darin, reguläre Ausdrücke zu verwenden, von denen ich denke, dass sie für die meisten Adresstypen, die ich in der Datenbank gesehen habe, behoben wurden. Dennoch habe ich Probleme mit der letzten RegExp ich definiert (im Code r4 genannt), weil es einen Teil der ersten Klammer, die ich nicht brauche, neu abstimmen, und ich weiß nicht, warum ich ein extra Leerzeichen habe wenn es die letzte Gruppe zurückgibt (Stadt: London, Land: England). Kann jemand helfen?Reguläre Ausdrücke in Python. Kann jemand einem Neuling helfen?
import re
r1 = '\s*ForeignZip.*--\s*([\d\.]+)'
r2 = '(\w+)\W*,\W*(\w*)'
r3 = '(?<=\().*?(?=\))'
r4 = '(\w+\W\()'
Location = [' ForeignZip (xxx) -- 734.450','Washington, DC.','London (England)']
for item in Location:
print item
match1 = re.search(r1,item)
match2 = re.search(r2,item)
match3 = re.search(r3,item)
match4 = re.search(r4,item)
if match1:
print 'pattern 1 found:', match1.group(1)
elif match2:
print 'pattern 2 found: City :' + match2.group(1) + ", State :" + match2.group(2)
elif match3:
print 'pattern 3 found: City: ', match4.group() + ", Country :" + match3.group(0)
else:
print 'no match'
Das gibt
ForeignZip (xxx) -- 734.450
pattern 1 found: 734.50
Washington, DC.
pattern 2 found: City :Washington, State :DC
London (England)
pattern 3 found: City: London (, Country :England
Ihr Hauptproblem ist das '\ (' is * i nside * Ihre Fanggruppe. Wenn Sie es nicht in die Erfassungsgruppe aufnehmen möchten, es aber dennoch zur Übereinstimmung verwenden möchten, platzieren Sie es außerhalb der Klammern in Ihrer Regex. Außerdem ist es ineffizient, alle 4 Muster zu bewerten. Warum überprüfen Sie nicht, ob eine Übereinstimmung gefunden wird, nachdem jede Regex ausgeführt wurde. Wenn Sie also eine Übereinstimmung mit dem ersten Muster finden, können Sie die Auswertung aller übrigen Muster vermeiden. –