【问题标题】:Street Regex - how do I match a specific word if it appears after another specific word, but not if it occurs before?Street Regex - 如果特定单词出现在另一个特定单词之后,我如何匹配它,但如果它出现在之前则不匹配?
【发布时间】:2019-04-09 02:50:21
【问题描述】:

我正在做一个街道名称正则表达式并想匹配单词:

(\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。

有没有办法缩短它以匹配街道名称和指南针方向 - 仅当它们出现在街道名称之后 - 而不必在每个街道名称之后复制指南针方向正则表达式?

【问题讨论】:

    标签: regex


    【解决方案1】:

    如果您想要一组选项,然后是一组在我看来就像两个 OR 组的选项。所以你应该以不同的方式分割你的选择。请参阅下面如何避免每次都复制它们。

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

    【讨论】:

    • 啊,我没有意识到有一个可选的能力可以像那样使用。这正是我所需要的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2013-05-19
    • 2014-08-27
    • 2011-10-02
    • 2013-07-02
    相关资源
    最近更新 更多