为什么这个正则表达式不适用于re.search



我正在尝试使用正则表达式从文本中提取加拿大邮政编码。

我已经从链接尝试了这个正则表达式

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')

(第二组邮编(

请注意,如果没有邮政编码,这可能会变得一团糟,在这种情况下,你只有一个组,所以你可以过滤这些组。

最新更新