【问题标题】:Python, Regular Expression Postcode searchPython,正则表达式邮政编码搜索
【发布时间】:2010-09-27 13:10:09
【问题描述】:

我正在尝试使用正则表达式在字符串中查找英国邮政编码。

我在 RegexBuddy 中使用了正则表达式,见下文:

\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\b

我有一堆地址,想从中获取邮政编码,示例如下:

123 某路名
镇、市

PA23 6NH

我将如何在 Python 中解决这个问题?我知道 Python 的 re 模块,但我正在努力让它工作。

干杯

伊夫

【问题讨论】:

  • 你应该检查:govtalk.gov.uk/gdsc/schemas/bs7666-v2-0.xsd 特别是 "(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ- [QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[ QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][AZ-[CIKMOV]]{2})" 用于标准正则表达式

标签: python regex postal-code


【解决方案1】:

使用邮政编码 PA23 6NH、PA2 6NH 和 PA2Q 6NH 重复您的地址 3 次作为您的模式测试,并使用来自维基百科的正则表达式与您的匹配,代码是..

import re

s="123 Some Road Name\nTown, City\nCounty\nPA23 6NH\n123 Some Road Name\nTown, City"\
    "County\nPA2 6NH\n123 Some Road Name\nTown, City\nCounty\nPA2Q 6NH"

#custom                                                                                                                                               
print re.findall(r'\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\b', s)

#regex from #http://en.wikipedia.orgwikiUK_postcodes#Validation                                                                                            
print re.findall(r'[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][A-Z]{2}', s)

结果是

['PA23 6NH', 'PA2 6NH', 'PA2Q 6NH']
['PA23 6NH', 'PA2 6NH', 'PA2Q 6NH']

两个正则表达式都给出相同的结果。

【讨论】:

  • 由于我重视清晰,我将正则表达式修改为:'[A-Z]{1,2}[\dR][\dA-Z]? \d[A-Z]{2}' (\d 而不是 [0-9],如果你的意思是“一个数字”,最好直接说出来。)
  • 实际上我只是从问题中获取了正则表达式“原样”。由于问题是关于在 python 中使用 re 模块而不是专门针对正则表达式,所以我决定不修改有问题的正则表达式。
【解决方案2】:

试试

import re
re.findall("[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}", x)

您不需要\b。

【讨论】:

    【解决方案3】:
    #!/usr/bin/env python
    
    import re
    
    ADDRESS="""123 Some Road Name
    Town, City
    County
    PA23 6NH"""
    
    reobj = re.compile(r'(\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\b)')
    matchobj = reobj.search(ADDRESS)
    if matchobj:
        print matchobj.group(1)
    

    示例输出:

    [user@host]$ python uk_postcode.py 
    PA23 6NH
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多