Python2.7改进正则表达式 同时匹配完整及不完整英国邮编
代码调整说明
你只需要做3处核心调整即可同时支持两类邮编识别:
- 调整正则匹配逻辑,将完整邮编匹配规则放在最前,短邮编规则放在后面用
|分隔,保证优先返回完整邮编,不会出现把完整邮编的前半段错当成短邮编返回的问题 - 新增短邮编匹配规则:按照需求编写
[A-Z]{1,2}\d{1,2},匹配1-2个字母后接1-2位数字的不完整邮编格式,覆盖SE3、E2、SE45、E34这类样例 - 删掉原代码重复执行正则搜索的冗余逻辑,只需要执行一次搜索,通过判断结果是否为空决定返回匹配到的邮编还是"na",减少不必要的性能消耗
修改后可直接运行的代码
import re def pcsearch(postcode): # 分支正则:优先匹配完整英国邮编,匹配失败再尝试匹配短格式邮编 match_result = re.search( r'(?i)[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][A-Z]{2}|[A-Z]{1,2}\d{1,2}', postcode ) return match_result.group() if match_result else "na"
效果验证
你可以用以下样例测试匹配结果:
- 传入包含完整邮编的字符串
"地址:DE2 7TT",会返回DE2 7TT - 传入仅包含短邮编的字符串
"片区:SE45",会返回SE45 - 传入没有对应邮编的字符串,会返回
na - 大小写混写的邮编比如
e2、Se3也能正常识别,和原有逻辑的大小写兼容能力一致
内容的提问来源于stack exchange,提问作者ratuk_
相关产品推荐
相关产品推荐

