python:将主地址拆分为主地址和辅助地址



我需要帮助创建一个python函数来在地址字段中创建主要街道地址(通常是门牌号和街道名称)。保存到地址2的其他地址信息(套房、单元、空间、邮政信箱、其他附加详细信息)

以下是需要拆分的地址格式的几个示例。

大街780号,邮政信箱4109-> 大街780号/邮政信箱4109

大学大道438号 邮政信箱5 -> 大学大道438号/邮政信箱5

10号公路39号箱->10号公路/邮政信箱39

拉斯罗普道98号 - 框147 -> 拉斯罗普道98号/邮政信箱147

396 S 主/邮政信箱 820-> 396 S 主/邮政信箱 820

18号和128号高速公路(1305号箱)->18号和128号高速公路/邮政信箱1305

808 因尼斯菲尔海滩路 Box 2 -> 808 Innisfil Beach Rd/PO Box 2

100 St 101 Ave, 邮政信箱 1620 -> 100 St 101 Ave/邮政信箱 1620

201德尔里奥(邮政信箱309->201德尔里奥/邮政信箱309

框 487 2054 1 号高速公路东 -> 2054 1 号高速公路东/邮政信箱 487

邮政信箱2820 41340 大熊BL -> 41340 大熊BL/邮政信箱2820

2813 HWY 15 - 邮政信箱 1083-> 2813 HWY 15/邮政信箱 1083

邮政信箱 838 2540 43 号高速公路西 -> 2540 号高速公路 43 西/POBox 838

我已经尝试了下面的代码。但它可以从地址中删除重要信息,并将邮政信箱数据保留在地址中(而不是将所有邮政信箱数据移动到地址 2 中)。

input_array = [
'780 Main Street, P.O. Box 410',        
'438 University Ave. P.O. Box 5 ',        
'HIGHWAY 10 BOX 39',         
'98 LATHROP ROAD - BOX 147',         
'396 S MAIN/P.O. BOX 820 ',       
'HWY 18 AND HWY 128 (BOX 1305)',     
'808 Innisfil Beach Rd Box 2',       
'100 St 101 Ave, P.o. Box 1620',       
'201 Del Rio (p.O. Box 309 ',       
'BOX 487 2054 HWY 1 EAST ',       
'P O BOX 2820 41340 BIG BEAR BL',        
'2813 HWY 15 - P O BOX 1083 ',        
'P.o. Box 838 2540 Hwy 43 West' 
]

import re
for inputs in input_array:
inputs = (inputs).lower()
for a in (inputs.split(' ')):
if 'box' in a:
box_index = (inputs.split(' ').index(a))
box_num = ((inputs.split(' ')[(inputs.split(' ').index(a)) + 1]))
if (((inputs.split(' ')[(inputs.split(' ').index(a)) + 1])).isdigit()):
if 'p' in ((inputs.split(' ')[(inputs.split(' ').index(a)) - 1])) or 'o' in ((inputs.split(' ')[(inputs.split(' ').index(a)) - 1])):
inputs = inputs.replace(((inputs.split(' ')[(inputs.split(' ').index(a)) - 1])), '')
else:
inputs = inputs.replace(((inputs.split(' ')[(inputs.split(' ').index(a)) + 1])), '')
inputs = inputs.replace(a, '')
inputs = inputs.replace('-', '')
inputs = inputs.replace('/', '')
inputs = inputs.replace(',', '')
print ('address => ',inputs,'    address2 => ', 'PO Box ', box_num)
break

需要改进上述功能,使其与预期结果更兼容。

足够有趣的问题。这是适用于您所有示例的正则表达式,但我不能确定它是否适用于您的项目。 在此处阅读更多正则表达式文档并使用正则表达式。

代码如下:

import re
streets = [
'780 Main Street, P.O. Box 410',
'438 University Ave. P.O. Box 5 ',
'HIGHWAY 10 BOX 39',
'98 LATHROP ROAD - BOX 147',
'396 S MAIN/P.O. BOX 820 ',
'HWY 18 AND HWY 128 (BOX 1305)',
'808 Innisfil Beach Rd Box 2',
'100 St 101 Ave, P.o. Box 1620',
'201 Del Rio (p.O. Box 309 ',
'BOX 487 2054 HWY 1 EAST ',
'P O BOX 2820 41340 BIG BEAR BL',
'2813 HWY 15 - P O BOX 1083 ',
'P.o. Box 838 2540 Hwy 43 West'
]
regex = r'([^a-z0-9]*(p[s.]?o)?[s.]*?box (d+)[^a-z0-9]*)'
for street in streets:
match = re.search(regex, street, flags=re.IGNORECASE)
po_box_chunk = match.group(0)
po_box_number = match.group(3)
cleaned_address = street.strip(po_box_chunk)
result = '{} / PO Box {}'.format(cleaned_address, po_box_number)
print(result)

最新更新