如何无需索引提取带连字符或不带连字符的末尾完整数字
解决方案
原代码的问题在于正则表达式(\d+)(?!.*\d)仅匹配连续数字序列,无法包含连字符,因此只能捕获到297,无法获取完整的297-32。
以下是两种无需使用索引的解决方法:
方法1:匹配标准邮编格式(数字-数字)
适用于明确是“数字+可选连字符+数字”的场景,精准匹配末尾目标:
import re address = """1183 Pelham Wood Dr, Rock Hill, SC 297-32""" zip_code_match = re.search(r'\d+(?:-\d+)?$', address) if zip_code_match: print(zip_code_match.group()) # 输出: 297-32
\d+:匹配开头的数字段(?:-\d+)?:非捕获组,匹配可选的“连字符+数字段”结构$:锚定文本末尾,确保匹配的是最后一段符合规则的内容
方法2:匹配末尾所有数字与连字符组合
适用于末尾是任意数字和连字符组成的连续片段(无需固定结构):
import re address = """1183 Pelham Wood Dr, Rock Hill, SC 297-32""" zip_code_match = re.search(r'[\d-]+$', address) if zip_code_match: print(zip_code_match.group()) # 输出: 297-32
[\d-]+:匹配一个或多个数字或连字符$:锚定文本末尾,直接定位目标内容
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

