有条件地重新排列字符串?

时间:2016-08-05 14:04:04

标签: python

我花了最近两个月的时间来编写一个清理,格式化和地理编码地址的脚本。它现在非常成功,但有一些地址给我带来了问题。

例如:

7TH AVENUE 530 xxxxxxxxxxx等地址导致我的地理位置模块失败。您可以假设x是其他文本。另一个文本不会导致错误,这完全是由于街道号码在大道之后。我目前在我的程序中有过滤器来截断街道后缀之后的地址,例如大道,街道等。因此,程序最终只会将7th avenue发送到清洁模块,这是不准确的。

如何解决街道后缀前面有一组数字然后将它们移到地址前面的情况。然后我可以继续,因为我已经是并在后缀后截断字符串。

您可以假设我有一个名为patterns的所有街道后缀的列表。

谢谢。非常感谢任何帮助。

进一步澄清:如果数字组的数字是3位数或更少,我只需要执行字符串的重新排列,因为邮政编码经常会出现在地址后缀之后,在我不想要的情况下重新排列字符串。

1 个答案:

答案 0 :(得分:0)

我不确定这是否有帮助,但你可以从这开始:

import re
address = '7TH AVENUE 530 xxxxxxxxxxx'
m = re.search('(?<=AVENUE )\d{1,3}', address)
print (m.group(0))
>>> 530

根据您的评论进行修改:

import re
original = '7TH AVENUE 530 xxxxxxxxxxx'
patterns = ['street', 'avenue', 'road', 'place']
regex = r'(.*)(' + '|'.join(patterns) + r')(.*)'
address = re.sub(regex, r'\1\2', original.lower()).lstrip()
new_addr = re.search(r'(?<=%s )\d{1,3} ' % address, original.lower())
resulting_address = ' '.join([new_addr.group(0).strip(),address]) if new_addr else address
address = ' '.join(map(str.capitalize, resulting_address.split()))