2013-08-07 2 views
5

У меня возникла ситуация, когда пользователь отправляет адрес, и мне нужно заменить пользовательскими вводами на мои ключи. Я могу присоединиться к этому, используя адрес без суффиксов.соответствие регулярному выражению и замена нескольких шаблонов

ВАГОН TRAIL КРЫТАЯ

Chisholm TRAIL

ОЗЕРО TRAIL

Chestnut St

ЛИНКОЛЬНА УЛИЦА

к:

ВАГОН

КРЫТАЯ

Чишоого

LAKE

КАШТАН

LINCOLN

Однако я не могу понять, как этот код может быть написано, чтобы заменить только последнее слово. я получаю:

LINCOLN

КАШТАНА

Чишоого

LAKEAIL

CHISHOLMAIL

РАСПРОСТРАНЯЕТСЯ WAGONL

Я попытался регулярное выражение многословный, re.sub и $.

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 

ответ

6

Использование re.sub с $.

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

Спасибо! Так оно и было. – George

2

Если вы храните строку в формате:

target = ''' 

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

''' 

Там нет необходимости использовать регулярное выражение:

>>> print '\n'.join([x.rsplit(None, 1)[0] for x in target.strip().split('\n')]) 
LINCOLN 
CHESTNUT 
CHISHOLM 
LAKE 
CHISHOLM 
COVERED WAGON 
Смежные вопросы