[C#, Regex] Разделить строку на слова и цитаты

Итак, я хотел разбить регуляркой такую сроку:
aaaaa bbb "ccc ссс"
На такой массив:
[0] = aaaaa 
[1] = bbb 
[2] = ccc ссс
Когда-то давно я уже задавал такой вопрос, на что мне ответили таким вот паттерном:
[^\s"']+|"([^"]*)"|'([^']*)'
И все бы хорошо, но теперь мне понадобилось сохранять в цитатах кавычки и апострофы, т.е. результат уже должен быть таким:
[0] = aaaaa 
[1] = bbb 
[2] = "ccc ссс"
Пробовал кавычки вносить в скобки, но это не работает.

Ответ

Попробуйте такую строку
new Regex(@"[^\s""']+|""([^""]*)""|'([^']*)'")


Views: 1 716

» Лучшие комментарии


pro100master #2 - 3 years ago 0
Голосов: +0 / -0
тогда делай правило если пробел то разделить а если ковычка то запрешаем пробел
uranus #3 - 3 years ago (изм. ) 0
Голосов: +0 / -0
pro100master, в регулярках я почти полный ноль, можно пример? Мне проще подобное сделать без регулярок, но все же хотелось бы на них, вместо того, чтобы городить свой костыль.
Msey #4 - 3 years ago 0
Голосов: +0 / -0
Весь код в студию.
Nerevar #5 - 3 years ago (изм. ) 0
Голосов: +0 / -0
Твой паттерн находит все как надо - и одинарные и двойны кавычки и пробелы между словами внутри кавычек
uranus #6 - 3 years ago 0
Голосов: +0 / -0
Nerevar, я, наверно, не так выразился. Находит то он правильно, но мне нужно, чтобы в группу кавычки/апострофы попадали тоже, т.е. не:
"hello" world => [hello] [world]
А так:
"hello" world => ["hello"] [world]
Nerevar #7 - 3 years ago 0
Голосов: +0 / -0
    class Program
    {
        static void Main()
        {
            Console.OutputEncoding = Encoding.UTF8;
            string s = "aaa bbb 'ccc' \"ddd\"";
            Regex regex = new Regex(@"[^\s""']+|""([^""]*)""|'([^']*)'");
            MatchCollection matches = regex.Matches(s);
            if (matches.Count > 0)
            {
                foreach (Match match in matches)
                    Console.WriteLine(match.Value);
            }
            else
            {
                Console.WriteLine("Совпадений не найдено");
            }

            Console.Read();
        }
    }
Проверьте что выводит этот пример у вас? Используется ваш регекс
uranus #8 - 3 years ago 0
Голосов: +0 / -0
Nerevar #9 - 3 years ago (изм. ) 3
Голосов: +3 / -0

Попробуйте такую строку
new Regex(@"[^\s""']+|""([^""]*)""|'([^']*)'")
Прикрепленные файлы
uranus #11 - 3 years ago 0
Голосов: +0 / -0
Nerevar, огромное спасибо, все работает!