我想从地址字符串中提取艾伯塔省(加拿大)地区的邮政编码。
例如:
addr = '12345-67 Ave, Edmonton, AB T1A 2B3, Canada'
应提取T1A 2B3
。
与邮政编码匹配的正则表达式为[T]\d[A-Z] *\d[A-Z]\d
。但是,我不知道给定一个完整的地址,我怎么才能提取邮政编码呢?我想它必须用反向引用做()
,但我无法弄明白。
我如何在Python中实现这一目标?
答案 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非常有用。