我有一个地址列表,我想有一个正则表达式,该表达式可以只捕获街道名称,而没有街道类型,地址编号或基数方向。格式上有一些错误,但所有字符均使用大写字母。所以,
2038 W MAIN AVE
2038QWEW S JEFFERSON AVENUE
33 NORTH CALIFORNIA STREET
53371 SOUTH WASHINGTON
53371 S WASHINGTON AVENUE
1600 E PENNSYLVANIA AVE
WEST9 67ST ST
E171 N 23RD STREET
G171 N121ST STREET
应该返回
MAIN
JEFFERSON
CALIFORNIA
WASHINGTON
WASHINGTON
PENNSYLVANIA
67ST
23RD
121ST
到目前为止,我已经拥有
([^ W ]|[^ E ]|[^ S ]|[^ N ])([0-9])*([A-Z]+)[^ ]
但是我似乎不能只捕捉发生在街道号码之后的第一场比赛。我觉得我需要标准的贪婪运算符(即?
,*
或+
),但我不知道如何合并它们。
这两个链接使我关闭了:
答案 0 :(得分:0)
逻辑:我们正在寻找倒数第二个单词(字符集)+可能带有符号N的边框
^.*?\s[N]{0,1}([-a-zA-Z0-9]+)\s*\w*$
Res:
Match 1
Full match 0-15 `2038 W MAIN AVE`
Group 1. 7-11 `MAIN`
Match 2
Full match 16-43 `2038QWEW S JEFFERSON AVENUE`
Group 1. 27-36 `JEFFERSON`
Match 3
Full match 44-70 `33 NORTH CALIFORNIA STREET`
Group 1. 53-63 `CALIFORNIA`
Match 4
Full match 71-93 `53371 SOUTH WASHINGTON`
Group 1. 83-93 `WASHINGTON`
Match 5
Full match 94-119 `53371 S WASHINGTON AVENUE`
Group 1. 102-112 `WASHINGTON`
Match 6
Full match 120-143 `1600 E PENNSYLVANIA AVE`
Group 1. 127-139 `PENNSYLVANIA`
Match 7
Full match 144-157 `WEST9 67ST ST`
Group 1. 150-154 `67ST`
Match 8
Full match 158-176 `E171 N 23RD STREET`
Group 1. 165-169 `23RD`
Match 9
Full match 177-195 `G171 N121ST STREET`
Group 1. 183-188 `121ST`
答案 1 :(得分:0)
对于输出,您想要从给定的(地址)输入中获得什么,此正则表达式肯定会有所帮助: [\ pL \ pN] +(?= \ h + [\ pL \ pN] + $)
此正则表达式将匹配您行中倒数第二个单词,其中单词为“ 1个或多个任何语言的字母或数字”。
答案 2 :(得分:0)
我能够以一种稍微不同的方式解决这个问题
[0-9A-Z]* [0-9A-Z]*$
,然后我简单地将空格创建的字符串分割开。也许一两个步骤太多了,但它是透明的
答案 3 :(得分:0)
正则表达式不是将邮政地址拆分为字段的好工具。例如,在“美洲大道”中,“大道”是街道名称还是街道类型?还是在“北极大道”中,“北方”是方向还是街道名称?另外,如果存在拼写错误(与地址一样),则基于规则的解析就变得不可能。
要可靠地将地址分成多个字段,您需要一个地址标准化工具。我供职的公司名列Compiler Explorer。