为什么这个正则表达式不能与re.search一起使用?

2024-09-27 19:37:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我从link尝试了这个正则表达式

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

我做错了什么


Tags: 文本restreetsearchlinktempreturnspattern
2条回答

不是加拿大人,也不熟悉邮政编码,因此不保证:-)

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

(第二组中的邮政编码)

请注意,如果没有邮政编码,这可能会出问题,在这种情况下,您将只有一个组,所以您可以过滤这些组

re findall可能也非常有用,它会将所有匹配项编译成一个列表:

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)

Result

['V5E 1A1']

相关问题 更多 >

    热门问题