使用Python正则删除荷兰数字与邮政编码重复模式问题求助
问题解决:Python正则去除重复地址片段
错误原因分析
- 原有正则会单独匹配每一段符合
\d{,4}\s\d{4}\s[A-Za-z]{2}格式的内容,统一替换为第一个捕获组的数字,测试文本中两段重复的77 1502 CC都被替换为77,最终得到两个连续77的错误结果 - 原有规则的
([A-Za-z]){2}写法仅能捕获最后一位字母,无法完整保留2位字母后缀,\d{,4}允许匹配空数字存在匹配误差风险
修正后实现代码
import re text = 'H. Gerhardstraat 77 1502 CC 77 1502 CC Zaandam' # 匹配连续重复的地址后缀片段,仅保留1份 text = re.sub(r'\b((\d{1,4})\s(\d{4})\s([A-Za-z]{2}))\s+\1\b', r'\1', text) print(text)
运行输出结果:H. Gerhardstraat 77 1502 CC Zaandam
正则规则说明
\b:单词边界,避免匹配到文本中其他位置的零散内容((\d{1,4})\s(\d{4})\s([A-Za-z]{2})):第一个捕获组,完整匹配「1-4位数字门牌号 + 空格 + 4位数字邮编 + 空格 + 2位字母后缀」的地址片段\s+:匹配两段重复地址之间的空格\1:反向引用第一个捕获组的内容,要求后续出现的片段和前一段完全一致- 替换值为
\1即仅保留一份地址片段,去除重复内容
内容的提问来源于stack exchange,提问作者user773674
相关产品推荐
相关产品推荐

