Регулярное выражение для соответствия разделителей - PullRequest
2 голосов
/ 27 марта 2020

Используя строку

A B x C x D - E x F

Я пытаюсь захватить группы A B C и D, но не E или F.

Мое понимание регулярных выражений состоит в том, что я хочу все до \sx\s до \s-\s,

, поэтому я бы начал с .*(?=\sx\s),

, что я хочу, чтобы произошло столько раз, пока я не достигну \s-\s.

Мой результат (.*(?=\sx\s))*.*(?=\s-\s), который возвращает A B x C x D.

Я думаю, что это может иметь отношение к тому, как работают предзаголовки, но я потерял на что менять.

1 Ответ

0 голосов
/ 27 марта 2020

Используя положительный прогноз (?=\s-\s), шаблон должен присутствовать в данных.

Если вы хотите сопоставить AB, C и D, а также хотите сопоставить эти значения, если эта часть - E x F отсутствует, вы можете использовать квантификатор в негативном виде:

(?<!\s-\s.*)[A-Z](?:\s[A-Z])*

Пояснение

  • (?<!\s-\s.*) Отрицательный оглянуться назад, заявить, что слева не \s-\s
  • [A-Z] Соответствует символу AZ
  • (?: Группа без захвата
    • \s[A-Z] Математический символ пробела затем AZ
  • )* Закрыть группу и повторить 0+ раз

. NET regex demo

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