正则表达式:仅匹配地址中的街道名称
Regex: Match only street name within address
我有一个地址列表,我想要一个正则表达式,它能够仅捕获街道名称,而不包含街道类型、地址编号或主要方向。格式有一些错误,但所有字符都是大写字母。所以,
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
应该return
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
逻辑:我们正在寻找倒数第二个单词(字符集)+可能带有符号 N
的边框
^.*?\s[N]{0,1}([-a-zA-Z0-9]+)\s*\w*$
回复:
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`
对于给定(地址)输入的输出,此正则表达式肯定会有所帮助:[\pL\pN]+(?=\h+[\pL\pN] +$)
此正则表达式将匹配您行中的倒数第二个单词,其中一个单词是“1 个或多个任何语言的任何字母或数字”。
我能够以稍微不同的方式解决这个问题
[0-9A-Z]* [0-9A-Z]*$
然后我简单地拆分它由 space 创建的字符串。也许一两步太多了,但它是透明的
我有一个地址列表,我想要一个正则表达式,它能够仅捕获街道名称,而不包含街道类型、地址编号或主要方向。格式有一些错误,但所有字符都是大写字母。所以,
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
应该return
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
逻辑:我们正在寻找倒数第二个单词(字符集)+可能带有符号 N
的边框^.*?\s[N]{0,1}([-a-zA-Z0-9]+)\s*\w*$
回复:
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`
对于给定(地址)输入的输出,此正则表达式肯定会有所帮助:[\pL\pN]+(?=\h+[\pL\pN] +$)
此正则表达式将匹配您行中的倒数第二个单词,其中一个单词是“1 个或多个任何语言的任何字母或数字”。
我能够以稍微不同的方式解决这个问题
[0-9A-Z]* [0-9A-Z]*$
然后我简单地拆分它由 space 创建的字符串。也许一两步太多了,但它是透明的