Python 正则表达式一些名称 + 美国地址

Python Regex some name + US Address

我有这些字符串:

WILLIAM SMITH 2345 GLENDALE DR RM 245 ATLANTA GA 30328-3474
LINDSAY SCARPITTA 655 W GRACE ST APT 418 CHICAGO IL 60613-4046

我想确保我将获得的字符串与上面的字符串一样。
这是我的正则表达式:

[A-Z]+ [A-Z]+ [0-9]{3,4} [A-Z]+ [A-Z]{2,4} [A-Z]{2,4} [0-9]+ [A-Z]+ [A-Z]{2} [0-9]{5}-[0-9]{4}$

但是我的正则表达式只匹配第一个例子,不匹配第二个例子

试试这个:

^[A-Z]+[ \t]+[A-Z]+[ \t]+\d+.*[ \t]+[A-Z]{2}[ \t]+\d{5}(?:-\d{4})$

Demo

解释:

1. ^[A-Z]+[ \t]+[A-Z]+[ \t]+  Starting at the start of line, 
    two blocks of A-Z for the name 
    (however, names are often more complicated...)

2. \d+.*[ \t]+[A-Z]{2}[ \t]+  Using number start and 
   two letter state code at the end for the full address
   Cities can have spaces such as 'Miami Beach'

3. \d{5}(?:-\d{4})$  Zip code with optional -NNNN with end anchor

这是 dawg 的捕获组正则表达式:

^([A-Z]+[ \t]+[A-Z]+)[ \t]+(\d+)[ \t](.*)[ \t]+([A-Z]{2})[ \t]+(\d{5}(?:-\d{4}))$

这是 url

更新

抱歉,我忘记删除 dawg 正则表达式末尾的非捕获组...
这是没有非捕获组的新正则表达式:regex101