регулярное выражение сопоставляет все после последнего пробела со словом максимум 2 или 5 символов - PullRequest
0 голосов
/ 07 февраля 2020

Сначала нужно найти последний пробел в строке

"это тест NL" с кодом (.*\s) я получаю слово NL

"это тест NL-NL" с кодом (.*\s) я получаю слово NL-NL

Но

"это test NL Search " с кодом (.*\s) я получаю слово Search это неправильно. Он не должен возвращать ничего

Последнее слово может иметь 2 или 5 (со специальным символом - или /) символ. Это де-код, но он не работает

(.*\s)(\w{2}|\w-/{5})

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Вы можете использовать группу захвата, если хотите захватить значение (или сделать так, чтобы оно не захватывало (?:) с классом символов и чередованием с использованием |, чтобы соответствовать либо символам из 2 слов, либо соответствует 5 раз одному из перечисленных.

^.*\s(\w{2}|[\w/-]{5})$

Regex demo

Обратите внимание, что \s также может соответствовать символу новой строки.


Если / и - не могут встречаться 2 раза друг за другом, а не в начале или в конце, и их должно быть хотя бы одно вхождение:

^.*\s(\w{2}|(?=[\w/-]{5}$)\w+(?:[/-]\w+)+)$

Regex demo


Или сделать вторую часть строки необязательной

^.*\s([a-zA-Z]{2}(?:[/-][a-zA-Z]{2})?)$

Regex demo

0 голосов
/ 07 февраля 2020

Вы, вероятно, ищете что-то вроде (?<=\s)(\w{2}|[\/\-\w]{5})$

Где различные части означают:

  • (?<=\s) Положительный взгляд позади должен быть пробелом (начало матча после)
  • (...|...) Либо ... или ...
  • \w{2} Любые два символа слова
  • [\/\-\w]{5} Sla sh, дефис или любой символ слова (пять раз )
  • $ Конец строки

Вы можете проверить выражение здесь .

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