#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.