Одно регулярное выражение для захвата слов, разделенных одним пробелом, в сочетании с противоположными случаями захвата более чем одним пробелом - PullRequest
1 голос
/ 20 февраля 2020

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

Я бы хотел покрыть следующий пример:

This line with     sometimes more than    1  space needs to be captured in 3 matches with 2 groups.

Я ожидаю следующих групп:

([This line with][     ])([sometimes more than][    ])([1][  ])space needs to be captured in 3 matches with 2 groups.

Для захвата одной из двух проблем нет. то есть захватить более одного пробела:

([\s]{2,})

и захватить слова, разделенные только одним пробелом (см. { ссылка }):

\S+(?:\s\S+)*

1 Ответ

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

Вы можете использовать чередование для сопоставления либо слова, за которым следует повторяющийся шаблон из одного пробела и слова ИЛИ совпадения с 2 или более пробелами

\S+(?: \S+)*| {2,}

Объяснение

  • \S+ Совпадение 1+ непробельных символов
  • (?: \S+)* Повторить 0+ раз, сопоставляя пробел и 1+ непробельных символов
  • | Или
  • {2,} Повторите 2 или более раза, встречаясь с пробелом

Regex demo

Если вы хотите сопоставить пробельные символы вместо этого вы можете заменить пробел на \s, но учтите, что он также может совпадать с символами новой строки.

Редактировать

В обновленном вопросе вы можете использовать 2 захвата группы:

(\S+(?: \S+)*)( {2,})

Объяснение

  • ( Захват группа 1
    • \S+ Матч 1 + непробельные символы
    • (?: \S+)* Повторить 0+ раз, сопоставляя пробел и 1+ непробельные символы
  • ) Закрыть группу 1
  • * 10 59 * Захват группа 2
    • {2,} Совпадение 2 или более пробелов
  • ) Закрыть группу 2

Regex demo

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