Street Regex - как мне сопоставить определенное слово, если оно появляется после другого конкретного слова, а не если оно встречается раньше? - PullRequest
2 голосов
/ 09 апреля 2019

Я выполняю регулярное выражение названия улицы и хочу сопоставить слова:

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

, что становится чрезвычайно громоздким, поскольку мне приходится дублировать WEST, EAST, NORTH, SOUTH по одному разу для каждогоиз 15+ обозначений улиц.

Есть ли способ сократить это, чтобы соответствовать обозначению улицы и направлениям компаса - только если они появляются после обозначения улицы - без необходимости дублировать регулярное выражение направления компаса после каждой улицыобозначение?

1 Ответ

2 голосов
/ 09 апреля 2019

Если вы хотите установить определенное количество параметров, за которым следует заданное количество параметров, которое для меня выглядит просто как два набора ИЛИ.Таким образом, вы должны разделить ваши варианты по-другому.Посмотрите ниже, как вы можете не копировать их каждый раз.

(STREET|AVENUE)[\s](NORTH|SOUTH|EAST|WEST)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...