Регулярное выражение для сопоставления каналов без подстроки между ними - PullRequest
1 голос
/ 08 мая 2020

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

Например:

AB C, XYZ, |||, ||| ||, || G | F |, 1 | 2, ||||, R | T | Y

Я хочу только ||| и ||||| и |||| выбрано.

Заранее спасибо за вашу помощь.

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

Использование помощи людей в комментариях ниже. У меня есть регулярное выражение, которое частично работает (? <= ^ |, \ S)? (\ | +) (? =, |, $) </p>

Однако это выбирает | после F в подстроке || G | F |

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

1 Ответ

2 голосов
/ 08 мая 2020

Вы не указали язык, который используете. Если он поддерживает \ K, как PCRE (PHP) и другие, вы извлекаете подстроки, которые соответствуют следующему регулярному выражению.

(?:^|,)[^,|]*\K\|{2,}(?=[^,|]*(?:,|$))

Demo

The Механизм регулярных выражений выполняет следующие операции.

(?:^|,)     # match start of string or ',' in a non-capture group
[^,|]*      # match 0+ chars other than ',' and '|'
\K          # forget everything matched so far
\|{2,}      # match 2+ '|'  
(?=
  [^,|]*    # match 0+ chars other than ',' and '|'
  (?:,|$)   # match a comma or the end of the string 
)           # end non-capture group 

Взято из демонстрационной ссылки, «\ K сбрасывает начальную точку сообщенного совпадения».

Если вы wi sh для соответствия одиночному каналы между запятыми (например, ,1|2,) замените {2,} на +.

Если \K не поддерживается, но можно использовать группу захвата, можно использовать следующее регулярное выражение.

(?:^|,)[^,|]*(\|{2,})(?=[^,|]*(?:,|$))

Демо

Интересующие строки хранятся в группе захвата 1 для каждого совпадения.

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