Python,加拿大地址RegEx验证

时间:2015-04-25 00:49:19

标签: python regex validation

我正在尝试编写一个使用RegEx验证加拿大地址的Python脚本。

例如,此地址有效:

 " 123 4th Street, Toronto, Ontario, M1A 1A1 "

但这一个无效:

 " 56 Winding Way, Thunder Bay, Ontario, D56 4A3"

我尝试了许多不同的组合,保持加拿大邮政编码的规则,例如最后6个字母数字位不能包含字母(D,F,I,O,Q,U,W,Z),但所有条目似乎都来了失效。我试过 “('^ [ABCEGHJKLMNPRSTVXY] {1} \ d {1} [A-Z] {1} * \ d {1} [A-Z] {1} \ d {1} $')”但仍然无效

这是我到目前为止所拥有的

    import re


postalCode = " 123 4th Street, Toronto, Ontario, M1A 1A1 "

#read First Line
line = postalCode

#Validation Statement
test=re.compile('^\d{1}[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$')


if test.match(line) is not None:
    print 'Match found - valid Canadian address: ', line
else:
    print 'Error - no match - invalid Canadian address:', line

3 个答案:

答案 0 :(得分:2)

就像这样......永远:

/[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9]/

如果你想把第一个字母限制为只有有效的第一个字母,那就没关系了,但其余部分太复杂了,不能与之相提并论。

答案 1 :(得分:1)

加拿大邮政编码不能包含字母D,F,I,O,Q或U,不能以W或Z开头:

这对你有用:

'-0'
import re

postalCode = " 123 4th Street, Toronto, Ontario, M1A 1A1 "
#read First Line
line = postalCode

if re.search("[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ] ?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]", line , re.IGNORECASE | re.DOTALL):
    print 'Match found - valid Canadian address: ', line
else:
    print 'Error - no match - invalid Canadian address:', line

演示

http://ideone.com/QAsrUT

答案 2 :(得分:0)

[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d

也许它会起作用:D