我想从地址字符串中提取阿尔伯塔(加拿大)地区的邮政编码。
例如:
addr = '12345-67 Ave, Edmonton, AB T1A 2B3, Canada'
应该提取T1A 2B3
.
匹配邮政编码的正则表达式是[T]\d[A-Z] *\d[A-Z]\d
. 但是,我不知道给定一个完整的地址,我怎样才能只提取邮政编码?我想它必须与反向引用有关()
,但我无法弄清楚。
如何在 Python 中实现这一点?
仅提取与正则表达式匹配的子字符串很容易:
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
将返回一个匹配对象,其中包含您可以提取的各种内容。
在@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,这是一个非常有用的测试正则表达式的工具。