2013-08-07 12 views
5

Ich habe eine Situation, in der ein Benutzer eine Adresse sendet und ich Benutzereingaben zu meinen Schlüsseln ersetzen muss. Ich kann dies mit einer Adresse ohne Suffixe verbinden.Regex übereinstimmen und mehrere Muster ersetzen

FALLEN WAGON TRAIL

Chisholm Trail

Seespur

CHESTNUT ST

LINCOLN STREET

zu:

FALLEN WAGON

CHISHOLM

LAKE

KASTANIE

LINCOLN

Allerdings kann ich nicht verstehen, wie dieser Code kann nur das letzte Wort zu ersetzen, geschrieben werden. ich:

LINCOLN

KASTANIE

CHISHOLM

LAKEAIL

CHISHOLMAIL

FALLEN WAGONL

Ich habe versucht, regex ausführlich, re.sub und $.

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 

Antwort

6

Verwenden re.sub mit $.

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

Dank! Das hat es getan. – George

2

Wenn Sie Ihre Zeichenfolge lagern im Format:

target = ''' 

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

''' 

Es gibt keine Notwendigkeit, Regex zu verwenden ist:

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