Как сопоставить присутствие хотя бы одной из нескольких необязательных групп? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть регулярное выражение с тремя группами «ноль или одна», просто введите: (\d\s)?(\w\s)?(\D\s)? и я хочу, чтобы регулярное выражение не совпадало, если строка не содержит ни одной из этих групп.

Подробно:

  1. "0 a x" - хорошая строка, совпадение;
  2. "a x ", "0 x ", "0 a " - хорошая строка, совпадение;
  3. "0", "a", "x" - хорошая строка, совпадение;
  4. "" (пустая строка) - некрасиво, не совпадать.

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

Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019

Попробуйте это регулярное выражение:

^(?!\s*$)(\d*\s*)(\w*\s*)([^\d\r\n]*\s*)$

Нажмите для демонстрации

ИЛИ

^(?! *$)(\d* *)(\w* *)([^\d\r\n]* *)$

Объяснение:

  • ^ - устанавливает начало строки
  • (?!\s*$) - необходимо сделать отрицательный прогнозубедитесь, что строка не пуста
  • (\d*\s*) - соответствует 0+ цифр, за которыми следуют 0+ пробелов, и захватите ее в группе 1
  • (\w*\s*) - соответствует 0+ символов слова, за которыми следует 0+ пробелы и захватить его в группе 2
  • ([^\d\r\n]*\s*) - сопоставить 0+ нецифров с последующими пробелами 0+ и захватить его в группе 3
  • $ - заявить об окончаниилиния.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...