Сопоставление нескольких строковых символов с регулярными выражениями - PullRequest
1 голос
/ 13 июля 2020

`## (Комната чата 1) Получен запрос на соединение от клиента 1.

(CR 1) RR 1.

(Комната чата 1) Принятый клиент 1.

(CR 1) A C 1.

(Комната чата 0) Получен запрос на соединение от клиента 2.

(CR 0) R C 2.

(Комната чата 0) Отклоненный клиент 2 Проблема со строкой соответствия

Изображение выше ясно показывает мою проблему. Я пытаюсь сопоставить RR, A C и R C. Я не хочу широкого соответствия, но конкретное совпадение c для RR или A C или RC ниже - это моя попытка регулярного выражения, которое работает, но его широкое совпадение, пока одна из этих букв найдена

(##[^\n]*\n)|(\(CR (\d+))\) [AC\RR\RC\] [0-9]+.

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

(##[^\n]*\n)|(\(CR (\d+))\) ["AC"\"RR"\"RC"\] [0-9]+.

Это все еще широкое соответствие

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы можете сопоставить ведущий ##, за которым следует остальная часть строки, и использовать одну группу захвата для соответствия одной из трех альтернатив:

^##.*\n\(CR \d+\) (R[RC]|AC) \d+\.

Пояснение

  • ^ Начало строки
  • ##.*\n Соответствует ##, остаток строки и новая строка
  • \(CR \d+\) Соответствует (CR и пробел, 1+ цифр и )
  • ( Захват группа 1
    • R[RC]|AC Соответствие RR или RC или AC
  • ) Закрыть группу 1
  • \d+. Сопоставить пробел, 1+ цифр и точку

Regex demo

0 голосов
/ 14 июля 2020
\)\s(.{2})\s

Поскольку шаблон аналогичен, взят) пробел и группа с диапазоном 2 и снова заканчиваются пробелом.

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