正则表达式匹配和替换多个模式

5
我有这样一种情况,一个用户提交了一个地址,我必须将用户输入替换为我的关键词。我可以使用没有后缀的地址加入这个地址。
COVERED WAGON TRAIL
CHISHOLM TRAIL
LAKE TRAIL
CHESTNUT ST
LINCOLN STREET
转换为:
COVERED WAGON
CHISHOLM
LAKE
CHESTNUT
LINCOLN
但是我无法理解如何编写此代码以仅替换最后一个单词。
我得到:
LINCOLN
CHESTNUT
CHISHOLM
LAKEAIL
CHISHOLMAIL
COVERED 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
2个回答

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)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接