You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用正则表达式实现不同格式地址字符串的精准分割?

解决地址字符串按数字开头部分分割的问题

原代码存在的问题

  • 条件判断逻辑错误:re.search()返回的是Match对象或None,无法直接与字符串address做不等比较,导致分支逻辑完全失效。
  • re.split()的使用方式会产生多余的空字符串,且拆分结果不符合预期格式。

正确实现方案

我们可以用一个统一的正则表达式直接匹配两种地址格式,捕获需要的两部分内容,无需分支判断:

正则表达式说明

^(.*?)\s+(\d+(?:\s+[a-z]+)?)$
  • ^:锚定字符串开头
  • (.*?):非贪婪匹配数字前的文本部分,避免过度匹配
  • \s+:匹配分隔文本与数字部分的一个或多个空格
  • (\d+(?:\s+[a-z]+)?):捕获数字开头的目标部分:
    • \d+:匹配一个或多个数字
    • (?:\s+[a-z]+)?:可选匹配数字后的空格+小写字母组合(?:标记为非捕获组,不单独提取)
  • $:锚定字符串结尾

代码示例

import re

address = input('Enter the address: ')
# 先去除字符串首尾空格,避免干扰匹配
match_result = re.match(r'^(.*?)\s+(\d+(?:\s+[a-z]+)?)$', address.strip())
if match_result:
    my_list = list(match_result.groups())
    print(my_list)
else:
    print("输入的地址格式不符合要求")

测试验证

  • 输入Street A 2 b,输出['Street A', '2 b']
  • 输入Street 23,输出['Street', '23']

内容的提问来源于stack exchange,提问作者Lucas Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:20:11