如何将含转义\n的地址数据拆分提取为地址、城市、邮编等独立字段
美国地址拆分实现方案
核心逻辑
你手头的地址是标准的三段式美国地址结构,按固定格式拆分即可:
- 第一段换行前内容为地址详情
- 第二段由「城市, 州缩写 邮编」组成
- 第三段为国家代码
具体实现步骤
- 预处理字符串:统一转义格式,把
\\n替换回\n,兼容转义和原始两种输入格式 - 按
\n切割字符串,得到3个独立片段,分别对应地址行、城市州邮编行、国家 - 处理城市州邮编行:先按英文逗号切分得到城市名,逗号后剩余内容按空格切分,分别得到州缩写和邮编
示例代码(Python)
def parse_us_address(raw_address: str) -> dict: # 兼容转义/未转义两种输入格式 formatted_address = raw_address.replace("\\n", "\n").strip() addr_segments = formatted_address.split("\n") # 校验地址格式合法性 if len(addr_segments) != 3: raise ValueError("输入地址不符合三段式标准US地址格式") addr_line, city_state_zip, country = addr_segments # 拆分城市、州、邮编 city, state_zip_part = city_state_zip.split(",", 1) state, zip_code = state_zip_part.strip().split() return { "地址": addr_line.strip(), "城市": city.strip(), "州": state.strip(), "邮编": zip_code.strip(), "国家": country.strip() } # 测试用例 if __name__ == "__main__": # 转义后格式测试 test_escaped = "132 Leo Lane Apt. 516\\nThe Colony, TX 76156\\nUS" print(parse_us_address(test_escaped)) # 原始格式测试 test_raw = "11 w 1120 ave.\nLombard, IL 12348\nUS" print(parse_us_address(test_raw))
注意事项
- 上述方案仅适配你给出的标准格式地址,如果存在城市名带逗号、地址行有多个换行、非美国地址等情况,需要额外增加边缘 case 兼容逻辑
- 如果地址数据格式杂、数据量大,可直接使用成熟的地址解析库比如
usaddress,不用自行维护拆分规则
内容的提问来源于stack exchange,提问作者chewie
相关产品推荐
相关产品推荐

