Regex, чтобы найти гипс, не окруженный символами - PullRequest
3 голосов
/ 05 марта 2020

Мне нужна помощь для создания регулярного выражения, чтобы найти все дефисы, у которых предыдущий и следующий символы не являются az и AZ. Ниже приведены примеры, в которых должны быть найдены дефисы.

This is - test
this is -test
this is- test
this is 2- test
this is 2 -test
this is 2-2 test

Ниже приведен пример, в котором дефис игнорируется:

this is-test

Пока я могу написать это:

(?<=[^a-z])-(?=[^a-z])

И это только поиск следующих дефисов в строках:

This is - test
this is 2- test
this is 2-2 test

Большое спасибо.

1 Ответ

4 голосов
/ 05 марта 2020

Во-первых, вместо использования отрицательного класса в положительном Lookahead / Lookbehind, вы могли бы вместо этого использовать отрицательные Lookaheads / Lookbehinds (если только вы не хотите убедиться, что дефису предшествует и что-то следует за ним). Теперь ваш шаблон означает:

Соответствует дефису, которому не предшествуют [a-z] и , за которым не следует [a-z].

В то время как вы, похоже, ищете:

Подберите дефис, которому не предшествует [a-z], а затем [a-z] одновременно.

В этом случае вы можете использовать следующее:

(?<![a-z])-|-(?![a-z])

Демо .

Или если вы хотите сохранить положительные Lookarounds с отрицательными классами:

(?<=[^a-z])-|-(?=[^a-z])

Примечание: Вы упомянули, что хотите проверить оба значения a-z и A-Z, но в своем примере вы использовали только a-z , Чтобы проверить и то, и другое, вы можете заменить [a-z] на [a-zA-Z], как показано выше.

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