我正在尝试使用正则表达式从文本中提取加拿大邮政编码。
我已经从链接尝试了这个正则表达式
pattern = "^(?!.*[DFIOQU])[A-VXY][0-9][A-Z].[0-9][A-Z][0-9]$"
temp = 'Portland Street, Burnaby, BC V5E 1A1'
re.search(pattern, temp) # returns None
我在这里做错了什么?
重新查找可能也很有用,它将把所有匹配项编译成一个列表:
import re
pattern = "(?!.*[DFIOQU])[A-VXY][0-9][A-Z].[0-9][A-Z][0-9](?<!.)"
temp = 'John Oliver 7111 Portland Street, Burnaby, BC V5E 1A1 Phone: 212-456-0781 Email: johnny@gmail.com'
r = re.findall(pattern, temp)
print(r)
结果
['V5E 1A1']
不是加拿大人,也不精通邮政编码,因此无法保证:-(
import re
pattern = "^(.*)((?!.*[DFIOQU])[A-VXY][0-9][A-Z].[0-9][A-Z][0-9]$)"
temp = 'Portland Street, Burnaby, BC V5E 1A1'
r = re.search(pattern, temp)
print(r.groups())
这就产生了:
('Portland Street, Burnaby, BC ', 'V5E 1A1')
(第二组邮编(
请注意,如果没有邮政编码,这可能会变得一团糟,在这种情况下,你只有一个组,所以你可以过滤这些组。