有条件地删除数字?

时间:2016-08-05 16:25:54

标签: python

如果标题不是很具描述性,我很抱歉。我不知道如何用几句话总结我的问题。

这是我的问题。我正在清理地址,其中一些正在造成一些问题。

我有一份名为patterns的分隔符(大道,街道,道路,地点等等)列表。

假设我有这个地址,例如:SUITE 1603 200 PARK AVENUE SOUTH NEW YORK

我希望输出为SUITE 200 PARK AVENUE SOUTH NEW YORK

我有什么方法可以看看在我的一个模式之前是否有两批数字(在这种情况下是1603200),如果是这样,剥去第一批我的字符串中的数字?即删除1603并保留200

更新:我已将此行添加到我的代码中:

address = re.sub("\d+", "", address)但它目前正在移除所有数字。我认为通过放置,1个地址之后它只会删除第一次出现,但事实并非如此

2 个答案:

答案 0 :(得分:3)

如果您想在<34;分隔符&#34;之一时应用此替代 如果有两个数字,则使用单词 ,您可以使用更高级的正则表达式。

import re

pattern = r"\d+ +(\d+ .*(STREET|AVENUE|ROAD|WHATEVER))"
input = "SUITE 1603 200 PARK AVENUE SOUTH NEW YORK"
output = re.sub(pattern, "\\1", input)

print(output) #SUITE 200 PARK AVENUE SOUTH NEW YORK

答案 1 :(得分:0)

您对自己想要做的事情的描述不是很清楚,但如果我理解正确,您希望删除第一次出现的数字序列吗?

您可以在不使用正则表达式的情况下执行此操作,

s = 'SUITE 1603 200 PARK AVENUE SOUTH NEW YORK'
l = s.split(' ')
for i, w in enumerate(l):
    for c in w:
        if c.isdigit():
            del l[i]
        break
print ' '.join(l)

输出: >>> SUITE 200 PARK AVENUE SOUTH NEW YORK