正则表达式:仅匹配地址中的街道名称

时间:2018-10-11 16:57:25

标签: regex string regex-lookarounds regex-greedy

我有一个地址列表,我想有一个正则表达式,该表达式可以只捕获街道名称,而没有街道类型,地址编号或基数方向。格式上有一些错误,但所有字符均使用大写字母。所以,

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]+)[^ ]

但是我似乎不能只捕捉发生在街道号码之后的第一场比赛。我觉得我需要标准的贪婪运算符(即?*+),但我不知道如何合并它们。

这两个链接使我关闭了:

Matching on every second occurence

Simple regex for street address

4 个答案:

答案 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`

https://regex101.com/r/m2rmUQ/4

答案 1 :(得分:0)

对于输出,您想要从给定的(地址)输入中获得什么,此正则表达式肯定会有所帮助: [\ pL \ pN] +(?= \ h + [\ pL \ pN] + $)

此正则表达式将匹配您行中倒数第二个单词,其中单词为“ 1个或多个任何语言的字母或数字”。

作为参考,您可以https://superuser.com/questions/1361759/matching-second-last-word-in-sentence-through-regular-expression

答案 2 :(得分:0)

我能够以一种稍微不同的方式解决这个问题

[0-9A-Z]* [0-9A-Z]*$

,然后我简单地将空格创建的字符串分割开。也许一两个步骤太多了,但它是透明的

答案 3 :(得分:0)

正则表达式不是将邮政地址拆分为字段的好工具。例如,在“美洲大道”中,“大道”是街道名称还是街道类型?还是在“北极大道”中,“北方”是方向还是街道名称?另外,如果存在拼写错误(与地址一样),则基于规则的解析就变得不可能。

要可靠地将地址分成多个字段,您需要一个地址标准化工具。我供职的公司名列Compiler Explorer