1

我想从地址字符串中提取阿尔伯塔(加拿大)地区的邮政编码。

例如:

 addr = '12345-67 Ave, Edmonton, AB T1A 2B3, Canada'

应该提取T1A 2B3.

匹配邮政编码的正则表达式是[T]\d[A-Z] *\d[A-Z]\d. 但是,我不知道给定一个完整的地址,我怎样才能只提取邮政编码?我想它必须与反向引用有关(),但我无法弄清楚。

如何在 Python 中实现这一点?

4

2 回答 2

4

仅提取与正则表达式匹配的子字符串很容易:

test = re.compile(r'[T]\d[A-Z] *\d[A-Z]\d')
addr = '12345-67 Ave, Edmonton, AB T1A 2B3, Canada'
test.search(addr).group()

test.search将返回一个匹配对象,其中包含您可以提取的各种内容。

于 2013-05-08T21:30:53.220 回答
1

在@Peter's Answer 的基础上,您可以通过以下方式获得更多邮政编码:

我们:

addr= 'Statue of liberty, New York, NY 10004, USA'
test = re.compile(r'\d{5}') 
test.search(addr).group()

英国:

addr= 'Olympic Park, Montfichet Rd, London E20 1EJ, United Kingdom'
test = re.compile(r'[A-Z]\d\d\s\d[A-Z]\d')

加拿大:

addr= 'Toronto City Hall, 100 Queen St W, Toronto, ON M5H 2N2'
test = re.compile(r'[A-Z]\d[A-Z]\s\d[A-Z]\d')

[A-Z]匹配 AZ 范围内的任何大写字母

[a-zA-Z]匹配 AZ 范围内的任何大写字母(不区分大小写)

\d匹配任何数字

\d{n}匹配任何出现的 n 位数字

\s匹配任何空白字符

您还可以使用Regex101,这是一个非常有用的测试正则表达式的工具。

于 2018-12-18T19:17:23.690 回答