2013-08-07 16 views
5

Ho una situazione in cui un utente invia un indirizzo e devo sostituire gli input utente alle mie chiavi. Posso aderire a questo utilizzando un indirizzo senza suffissi.corrispondenza regolare e sostituire più modelli

COPERTO Wagon Trail

Chisholm Trail

Lake Trail

CHESTNUT ST

LINCOLN STREET

a:

COPERTO WAGON

CHISHOLM

LAGO

CASTAGNO

LINCOLN

Tuttavia non posso comprendere come questo codice può essere scritto per sostituire solo l'ultima parola. ottengo:

LINCOLN

CASTAGNO

CHISHOLM

regex LAKEAIL

CHISHOLMAIL

COPERTO WAGONL

ho provato verbose, re.sub e $.

import re 
target = ''' 

LINCOLN STREET 
CHESTNUT ST 
CHISHOLM TR 
LAKE TRAIL 
CHISHOLM TRAIL 
COVERED WAGON TRL 

''' 
rdict = { 
' ST': '', 
' STREET': '', 
' TR': '', 
' TRL': '', 
} 
robj = re.compile('|'.join(rdict.keys())) 
re.sub(' TRL', '',target.rsplit(' ', 1)[0]), target 
result = robj.sub(lambda m: rdict[m.group(0)], target) 
print result 

risposta

6

Usa re.sub con $.

target = ''' 
LINCOLN STREET 
CHESTNUT ST 
CHISHOLM TR 
LAKE TRAIL 
CHISHOLM TRAIL 
COVERED WAGON TRL 
''' 

import re 
print re.sub('\s+(STREET|ST|TRAIL|TRL|TR)\s*$', '', target, flags=re.M) 
+0

Grazie! Questo è stato. – George

2

Se fate memorizzare la stringa nel formato:

target = ''' 

LINCOLN STREET 
CHESTNUT ST 
CHISHOLM TR 
LAKE TRAIL 
CHISHOLM TRAIL 
COVERED WAGON TRL 

''' 

Non v'è alcuna necessità di utilizzare espressioni regolari:

>>> print '\n'.join([x.rsplit(None, 1)[0] for x in target.strip().split('\n')]) 
LINCOLN 
CHESTNUT 
CHISHOLM 
LAKE 
CHISHOLM 
COVERED WAGON 
Problemi correlati