Шаблоны повторений Regex и несоответствующие группы

0

Хорошо, поэтому у меня возникла проблема с повторением работы, не говоря уже о том, как я хочу, чтобы она работала...

Я приведу строку со следующей информацией

NETWORK;PASS;1;THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS;\r

что я до сих пор

(?:NETWORK;.*;(?:0|1);)([^|]*)

это в настоящее время оставляет мне первый блок, соответствующий

THIS TEXT

то, что я пытаюсь сделать, это настроить его, чтобы я мог программным образом указать, какой блок будет соответствовать. текст, разделенный на трубы, будет иметь между 3-7 "блоками" и в зависимости от ситуации, которую мне может потребоваться, чтобы соответствовать любому из них, но только по одному.

Я думал о просто дублировании

([^|]*)

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

Я немного потерян, поэтому это может не иметь полного смысла, если требуется разъяснение. Я буду предоставлять по запросу. любая помощь приветствуется.

  • 0
    Либо это относится к регулярным выражениям C ++ (boost или standard library), некоторой библиотеке C для регулярных выражений или регулярным выражениям в целом (и исключают теги C и C ++).
Теги:

1 ответ

2
Лучший ответ

Почему бы просто не разделить THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS на символе трубы? Гораздо проще, чем динамически созданное регулярное выражение.

Но если вы действительно хотите создать регулярное выражение:

  1. Начните с (?:NETWORK;.*;(?:0|1);)
  2. Чтобы получить n-й элемент (с индексом из 0), добавьте (?:[^|]+[|]){n} (замените n номером, который нужно пропустить), а затем ([^|]+)

Пример:

(?:NETWORK;.*;(?:0|1);)(?:[^|]+[|]){3}([^|]+)

Изображение 174551

Демоверсия Debuggex

Соответствует WITH в вашем примере. Вот демо-версия regex101.

  • 0
    Это почти все, что я искал, я тестировал с regex101, но он ничего не соответствует, возвращает совпадение на этом сайте, есть ли конкретный сайт, который вы используете
  • 0
    Я использую debuggex.com . Мой пример работает на regex101 , хотя. Проблема с вашей первой попыткой заключалась в дублировании ([^|]*) - нет припуска на | , что также необходимо учитывать при каждом повторении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню