Python, espressioni regolari di ricerca CAP
-
22-08-2019 - |
Domanda
Sto cercando di utilizzare le espressioni regolari per trovare un codice postale del Regno Unito all'interno di una stringa.
Ho avuto l'espressione regolare che lavora all'interno RegexBuddy, vedi sotto:
\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\b
Ho un sacco di indirizzi e voglio afferrare il codice postale da loro, esempio qui sotto:
123 Alcuni Nome Strada
Città, Città
County
PA23 6NH
Come potrei andare su questo in Python? Sono consapevole del modulo re
per Python, ma sto lottando per farlo funzionare.
Saluti
Eef
Soluzione
ripetere il tuo indirizzo 3 volte con codice postale PA23 6NH, PA2 6NH e PA2Q 6NH come prova per voi modello e utilizzando l'espressione regolare da wikipedia contro il vostro, il codice è ..
import re
s="123 Some Road Name\nTown, City\nCounty\nPA23 6NH\n123 Some Road Name\nTown, City"\
"County\nPA2 6NH\n123 Some Road Name\nTown, City\nCounty\nPA2Q 6NH"
#custom
print re.findall(r'\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\b', s)
#regex from #http://en.wikipedia.orgwikiUK_postcodes#Validation
print re.findall(r'[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][A-Z]{2}', s)
il risultato è
['PA23 6NH', 'PA2 6NH', 'PA2Q 6NH']
['PA23 6NH', 'PA2 6NH', 'PA2Q 6NH']
sia la regex di danno lo stesso risultato.
Altri suggerimenti
Prova
import re
re.findall("[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}", x)
Non è necessario il \ B.
#!/usr/bin/env python
import re
ADDRESS="""123 Some Road Name
Town, City
County
PA23 6NH"""
reobj = re.compile(r'(\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\b)')
matchobj = reobj.search(ADDRESS)
if matchobj:
print matchobj.group(1)
uscita Esempio:
[user@host]$ python uk_postcode.py
PA23 6NH