Итак, я хотел разбить регуляркой такую сроку:
aaaaa bbb "ccc ссс"
На такой массив:
[0] = aaaaa 
[1] = bbb 
[2] = ccc ссс
Когда-то давно я уже задавал такой вопрос, на что мне ответили таким вот паттерном:
[^\s"']+|"([^"]*)"|'([^']*)'
И все бы хорошо, но теперь мне понадобилось сохранять…
9 2 638
0
8
6 лет назад
0
Nerevar, огромное спасибо, все работает!
3
20
6 лет назад
Отредактирован Nerevar
3
Попробуйте такую строку
new Regex(@"[^\s""']+|""([^""]*)""|'([^']*)'")
Загруженные файлы
0
8
6 лет назад
0
Загруженные файлы
0
20
6 лет назад
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();
        }
    }
Проверьте что выводит этот пример у вас? Используется ваш регекс
0
8
6 лет назад
0
Nerevar, я, наверно, не так выразился. Находит то он правильно, но мне нужно, чтобы в группу кавычки/апострофы попадали тоже, т.е. не:
"hello" world => [hello] [world]
А так:
"hello" world => ["hello"] [world]
0
20
6 лет назад
Отредактирован Nerevar
0
Твой паттерн находит все как надо - и одинарные и двойны кавычки и пробелы между словами внутри кавычек
0
29
6 лет назад
0
Весь код в студию.
0
8
6 лет назад
Отредактирован uranus
0
pro100master, в регулярках я почти полный ноль, можно пример? Мне проще подобное сделать без регулярок, но все же хотелось бы на них, вместо того, чтобы городить свой костыль.
0
23
6 лет назад
0
тогда делай правило если пробел то разделить а если ковычка то запрешаем пробел

C# Делегаты и события

В данной статье рассматриваются базовые операции над делегатами, их производными и связующими.
7 5 459
0
27
6 лет назад
Отредактирован Devion
0
даже базовый тип ничего не сделает, т.к. под капотом 'i' будет находиться в экземпляре делегата, и это будет один и тот же экземпляр во всех элементах списка.
На выходе компилятора будет примерно вот такое:
    public void Do()
    {
      List<Action> actionList = new List<Action>();
      DisplayClass displayClass = new DisplayClass();
      for (displayClass.i = 0; displayClass.i < 3; displayClass.i++)
      {
        actionList.Add(new Action((object) displayClass, __methodptr(<Do>b__0)));
      }
    }

    [CompilerGenerated]
    private sealed class DisplayClass
    {
      public int i;

      internal void <Do>b__0()
      {
        Console.Write((object) this.i);
      }
    }
т.к. вся лямбда внутри контекста захваченных переменных будет формировать отдельный класс то по факту замыкания не будет, если вынести лямбду в отдельный от цикла метод.
Так же можно создать переменную со значением и записать туда i, и уже эту переменную прокинуть в лямбду, в этом случае будет создаваться отдельный экземпляр делегата каждый виток цикла (но в старых версиях компилятора это будет работать иначе, что вроде как баг, ибо для пользователя оно по факту должно выглядеть как "передача ссылки").
Бтв, тут всплывает тема с аллокацией, т.к. как ты можешь заметить создание экземпляра каждый виток цикла это дичь )