Regex: проблема с заказом генераторов - PullRequest
0 голосов
/ 26 мая 2020

При использовании чередования в регулярном выражении мы должны включать элементы в генераторы переменного тока, чтобы не зависеть от рвения двигателя.

Тогда, если есть список, такой как co,co.,co-op,association,assoc мы бы предпочли включить их, чтобы получить наиболее точное соответствие. Затем это должно быть изменено на association,assoc,co-op,co.,co.

У меня есть базовый шаблон регулярного выражения c для разделения слова на два, если включен дефис или sla sh, поэтому я получаю только часть перед дефис или sla sh:

(.*(?<!\w)(CO-OP|CO|CO.)(?!\w).*)[-/](\s*\w+.*)

Однако это регулярное выражение неправильно работает при предоставлении ABC CO-OP ELEMENTARY SCHOOL. Эта строка становится просто ABC CO. Однако, если я удаляю СО из генераторов, строка возвращается в исходной форме ABC CO-OP ELEMENTARY SCHOOL, что является правильным. Кроме того, строка ARMSTRONG CO-OP ELEMENTARY SCHOOL / ECOLE PRIMAIRE ARMSTRONG COOPERATIVE должна быть разорвана, чтобы стать ARMSTRONG CO-OP ELEMENTARY SCHOOL без строки после sla sh.

Почему CO совпадает с генераторами переменного тока и используется для разрыва строки?

1 Ответ

2 голосов
/ 26 мая 2020

Ваша проблема в том, что ваше регулярное выражение требует , чтобы в строке было - или \, поэтому оно заставляет ABC CO-OP ELEMENTARY SCHOOL разбиваться на - в CO-OP . Если вы:

  1. сделаете вторую часть регулярного выражения необязательной;
  2. измените .* в конце первой группы на ленивую (.*?); и
  3. добавить якоря начала и конца строки

вы получите желаемые результаты:

^(.*(?<!\w)(?:CO-OP|CO|CO\.)(?!\w).*?)(?:[-/](\s*\w+.*))?$

Демо на regex101

Обратите внимание, что . в CO. следует экранировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...