街道正则表达式-如果一个特定的单词出现在另一个特定的单词之后,而我却不匹配,该如何匹配?

时间:2019-04-09 02:50:22

标签: regex

我正在使用街道名称正则表达式,并且想要匹配以下单词:

(\bNORTH|\bSOUTH|\bEAST|\bWEST)

如果它们出现在

后面
(\bSTREET|\bAVENUE)

...以及其他10条街道名称(例如LANE,DRIVE等,我将不在此处列出)

如果它们出现在街道名称之前,我不想匹配它们,因为我想这样匹配整个街道名称:

BOB STREET - Matches "BOB STREET"
BOB STREET WEST - Matches "BOB STREET WEST"
WEST BOB STREET - *** Matches "WEST BOB STREET" ***
NORTH BOB STREET WEST - *** Matches "NORTH BOB STREET WEST" ***

当前,我有一个非常长的正则表达式,看起来像这样:

[0-9].*?((\bSTREET (\bWEST|\bEAST|\bNORTH|\bSOUTH)|\bSTREET)|(\bAVENUE (\bWEST|\bEAST|\bNORTH|\bSOUTH)|\bAVENUE))

这变得非常笨拙,因为我必须为15个以上的街道名称中的每一个重复复制WEST,EAST,NORTH,SOUTH。

是否有一种方法可以缩短此距离以使其与街道名称和指南针方向匹配(仅当它们出现在街道名称之后),而不必在每个街道名称之后都重复罗盘方向正则表达式?

1 个答案:

答案 0 :(得分:2)

如果您要设置一定数量的选项,然后再选择一定数量的选项,这些设置对我来说就像是两个OR集。因此,您应该以其他方式拆分选项。参见下文,如何避免每次都复制它们。

(STREET|AVENUE)[\s](NORTH|SOUTH|EAST|WEST)?