6

正規表現を使用して、文字列内の英国の郵便番号を見つけようとしています。

RegexBuddy 内で動作する正規表現を取得しました。以下を参照してください。

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

私はたくさんの住所を持っていて、それらから郵便番号を取得したいです。以下の例:

123 Some Road Name
Town, City
County
PA23 6NH

Pythonでこれをどのように行うのでしょうか? 私はrePython 用のモジュールを認識していますが、それを機能させるのに苦労しています。

乾杯

イーフ

4

3 に答える 3

10

パターンのテストとして郵便番号PA236NH、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']

両方の正規表現で同じ結果が得られます。

于 2008-12-18T15:42:50.377 に答える
0
#!/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
于 2008-12-18T15:45:41.447 に答える
0

試す

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

\bは必要ありません。

于 2008-12-18T15:40:05.483 に答える