Как я могу игнорировать символ в начале / конце совпадения, я как будто пытаюсь найти аргументы командной строки

#c# #regex

#c# #регулярное выражение

Вопрос:

Итак, я хочу разделить разделенную пробелом строку / строку / текст, немного похожую на аргументы командной строки. Допустим, у меня есть это

 command argument0 'argument1' 'argument2, the whitespaces will be ignored'
  

Шаблон, который я пробовал:

 /('[^']*')|([!-amp;(-~] )/g
  

Он соответствует этим: command argument0 'argument1' 'argument2, the whitespaces will be ignored'

Он работает так, как будто я исключил, но мне интересно, есть ли способ не включать ' . Если вы знаете, как это сделать, если это возможно, объясните это. и извините, если вопрос не ясен, я здесь впервые

Редактировать: этот шаблон близок к решению ([^'] [^']*[^'])|([!-amp;(-~] )

Комментарии:

1. Исключите их из группы захвата, /'([^']*)'|([!-amp;(-~] )/g

2. ([^'] [^']*[^'])|([!-amp;(-~] ) это не решение. Решение приведено выше. Какой у вас язык программирования?

3. Используя System.Text.RegularExpression в c # да, я понял это, но это было близко к решению

4. Ага, так ты использовал Regex.Matches(text, @"'([^']*)'|([!-amp;(-~] )").Cast<Match>().Select(x => $"x.Groups[1].Value}{x.Groups[2].Value}") ?

5. Сейчас я тестирую его на regexr.com , я использую Regex.Split( text, myPattern ); его, он должен вернуть мне string[], и это все, что мне нужно

Ответ №1:

Вы должны переместить первую пару круглых скобок, чтобы исключить оба ' символа и использовать

 '([^']*)'|([!-amp;(-~] )
  

Смотрите демонстрацию C #:

 string text = "command argument0 'argument1' 'argument2, the whitespaces will be ignored'";
string[] results = Regex.Matches(text, @"'([^']*)'|([!-amp;(-~] )")
        .Cast<Match>()
        .Select(x => $"{x.Groups[1].Value}{x.Groups[2].Value}")
        .ToArray();
Console.WriteLine(string.Join("n", results));
  

Вывод:

 command
argument0
argument1
argument2, the whitespaces will be ignored
  

Комментарии:

1. Вау, это работает, но как. NET и regexr.com есть различия?

2. regexr.com поддерживает библиотеки регулярных выражений JavaScript и PCRE. C # использует библиотеку регулярных выражений .NET, которая в некоторых случаях работает по-разному и поддерживает некоторые функции, которых нет в JS и PCRE.