如何通过正则表达式解析1543 Tommy

时间:2016-09-20 15:05:11

标签: regex parsing

此正则表达式代码(如下所示)可用于地址行。例如:111 N Main St出现为MAIN。基本上,它省略了dravelane等以及N,S,N,E等数字之后的方向术语。

但是,如果地址行为110 Main Table(不包含streetstlaneblvd等关键字,则会显示该值为null。我希望结果为Main Table。另一个示例是110 N Main Table(同样,这不具有streetstlanebldvd等关键值。我需要它再次出现MAIN TABLE(简而言之,摆脱方向性术语(N),因为没有像streetstlane这样的关键字, blvd)取整件事(主表)

我想知道如何根据这些标准调整我的正则表达式

正则表达式代码:

(?<=\d\b)\s*(?:N|S|W|E|North|South|East|West|NE)\s(.?)\s(?=drive|dr|ave|avenue|lane|ln|loop|hwy|circle|cir|plaza|pl|terrace|blvd|boulevard|pkwy|drive|dr|way|road|court|Parkway|run|st|ct|terr|rd|street)?

1 个答案:

答案 0 :(得分:0)

正则表达式只是图片的一部分。你最好的选择是抓住这样的部分:

^(\d+)(?: [NS]?[WE]?)?(\w+(?: \w+)) (\w+)$

注意:如果需要,可以省略锚点^$

然后,之后,你可以使用语言的字符串比较运算符:

$3 == "foo" || $3 == "bar" || ... // should look something like this in C-like languages

或者,或者,如果您的语言支持它:

$3 in ["foo", "bar", ...]

然后你可以返回$2。将它们放在一起以获得JS示例:

s.replace(/^(\d+)(?: [NS]?[WE]?)?(\w+(?: \w+)) (\w+)$/, (match, $1, $2, $3) => $3 in ["foo", "bar", ...] ? $2 : null));

不幸的是,在没有列出所有可能性的情况下,没有任何方法可以做到这一点。