Исключить букву в шаблоне регулярных выражений - PullRequest
2 голосов
/ 19 февраля 2020

Я пытаюсь создать шаблон Regex для <String>-<String>. Это мой текущий шаблон:

(\w+\-\w+).

Первая строка не может быть "W". Тем не менее, он по-прежнему может содержать «W», если его длина более одной буквы.

Например: W-80 -> неверный W42-80 -> действительный

Как этого достичь?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Просто ограничьте последний символ «любым словом char, кроме« W »».

Есть несколько способов сделать это:

Отрицательный просмотр (легко читаемый) :

^\w+(?<!W)-\w+$

См. живая демонстрация .

Отрицательный перекресток (читать обломки поезда):

^\w*[\w&&[^W]]-\w+$

См. живая демонстрация .

——

Вопрос сместился. Вот новый вариант:

^.+(?<!^W)-\w+

В качестве первого термина допускается что угодно, кроме "W".

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

Таким образом, ваша первая строка может быть либо: один символ, но не W или 2+ символов. Простой шаблон для достижения этой цели:

([^W]|\w{2,})-\w+

Но этот шаблон не совсем корректен, потому что теперь он допускает любой символ для первой части, но первоначально предполагалось, что будут разрешены только символы \w. Итак, правильный шаблон:

([\w&&[^W]]|\w{2,})-\w+

Шаблон [\w&&[^W]] означает любой символ из \w класса символов, кроме W символа.

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