5

我遇到用户提交地址的情况,我必须将用户输入替换为我的密钥。我可以使用不带后缀的地址加入此活动。

有盖货车轨道

奇霍尔姆小径

湖径

栗子街

林肯街

至:

有盖货车

奇肖姆

板栗

林肯

但是我无法理解如何编写此代码来仅替换最后一个单词。我得到:

林肯

板栗

奇肖姆

莱克艾尔

柴绍尔邮件

有盖货车

我试过正则表达式详细,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
4

2 回答 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)
于 2013-08-07T01:32:35.780 回答
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
于 2013-08-07T01:42:50.497 回答