Хорошо, поэтому у меня возникла проблема с повторением работы, не говоря уже о том, как я хочу, чтобы она работала...
Я приведу строку со следующей информацией
NETWORK;PASS;1;THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS;\r
что я до сих пор
(?:NETWORK;.*;(?:0|1);)([^|]*)
это в настоящее время оставляет мне первый блок, соответствующий
THIS TEXT
то, что я пытаюсь сделать, это настроить его, чтобы я мог программным образом указать, какой блок будет соответствовать. текст, разделенный на трубы, будет иметь между 3-7 "блоками" и в зависимости от ситуации, которую мне может потребоваться, чтобы соответствовать любому из них, но только по одному.
Я думал о просто дублировании
([^|]*)
и добавление не совпадающего оператора ко всем, кроме одного, но я не могу заставить его соответствовать чему-либо, если я дублирую эту группу, и я также не могу заставить операторов повторения работать в группе.
Я немного потерян, поэтому это может не иметь полного смысла, если требуется разъяснение. Я буду предоставлять по запросу. любая помощь приветствуется.
Почему бы просто не разделить THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS
на символе трубы? Гораздо проще, чем динамически созданное регулярное выражение.
Но если вы действительно хотите создать регулярное выражение:
(?:NETWORK;.*;(?:0|1);)
(?:[^|]+[|]){n}
(замените n
номером, который нужно пропустить), а затем ([^|]+)
Пример:
(?:NETWORK;.*;(?:0|1);)(?:[^|]+[|]){3}([^|]+)
Соответствует WITH
в вашем примере. Вот демо-версия regex101.
([^|]*)
- нет припуска на |
, что также необходимо учитывать при каждом повторении.