2013-08-07 138 views
5

我有一種情況,用戶提交地址,我必須將 用戶輸入替換爲我的密鑰。我可以使用沒有後綴的地址加入。正則表達式匹配並替換多個模式

棚車TRAIL

CHISHOLM TRAIL

湖泊TRAIL

板栗ST

LINCOLN STREET

到:

棚車

CHISHOLM

LAKE

板栗

LINCOLN

但是我無法理解這個代碼怎麼寫僅替換最後一個字。 我得到:

LINCOLN

板栗

CHISHOLM

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