通过python中的正则表达式提取Alberta(加拿大)邮政编码

时间:2013-05-08 21:23:39

标签: python regex

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

例如:

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

应提取T1A 2B3

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

我如何在Python中实现这一目标?

2 个答案:

答案 0 :(得分: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将返回一个匹配对象,其中包含您可以提取的各种内容。

答案 1 :(得分:1)

以@Peter的答案为基础,这是您可以使用更多邮政编码的方法:

美国:

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]匹配范围A-Z中的任何大写字母

[a-zA-Z]匹配范围A-Z(不区分大小写)的所有大写字母

\d匹配任意数字

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

\s匹配任何空白字符

您还可以使用Regex101,这对测试Regexes非常有用。