如何利用正则表达式实现不同格式地址字符串的精准分割?
解决地址字符串按数字开头部分分割的问题
原代码存在的问题
- 条件判断逻辑错误:
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
相关产品推荐
相关产品推荐

