有条件地重新排列字符串



在过去的两个月里,我一直在编写一个脚本,用于清理、格式化和地理编码地址。它现在相当成功,然而,有些地址给我带来了问题。

例如:

7TH AVENUE 530 xxxxxxxxxxx等地址导致我的地理定位模块出现故障。您可以假设x是其他文本。另一条文字并没有引起错误,这纯粹是因为大道后面的街道编号。我目前在程序中有过滤器,可以在街道后缀(如avenue、street等(后截断地址。因此,程序最终只会将7th avenue发送到清洁模块,这是不准确的。

我如何解释街道后缀前有一组数字,然后将它们移动到地址的前面。然后我可以像现在一样继续,并截断后缀后面的字符串。

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

谢谢。非常感谢您的帮助。

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

我不确定这是否有帮助,但您可以从以下内容开始:

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'12', 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()))

最新更新