Member 13185123 Ответов: 1

Не получение нужной строки в группах регулярных выражений


Мой пример отлично работает с greedy, когда я использую для захвата всего значения строки и группы (только в группе[1]) заключаю с помощью пара одинарных кавычек
Но когда я хочу захватить все значение строки и группы (только в группе[1]), заключите несколько пар одинарных кавычек она только захватить значение из строки, заключите с последняя пара но не строка между первой и последней одинарными кавычками.

Что я уже пробовал:

string val1 = "Content:abc'23'asad";          //--->23
            string val2 = "Content:'Scale['#13212']'ta";

            Match match1 = Regex.Match(val1, @".*'(.*)'.*");
            Match match2 = Regex.Match(val2, @".*'(.*)'.*");
            if (match1.Success)
            {
                string value1 = match1.Value;
                string GroupValue1 = match1.Groups[1].Value;
                Console.WriteLine(value1);
                Console.WriteLine(GroupValue1);

                string value2 = match2.Value;
                string GroupValue2 = match2.Groups[1].Value;
                Console.WriteLine(value2);
                Console.WriteLine(GroupValue2);

                Console.ReadLine();

                // using greedy For val1 i am getting perfect value for-
                // value1--->Content:abc'23'asad
                // GroupValue1--->23

                // BUT using greedy For val2 i am getting the string elcosed by last single quote-
                // value2--->Content:'Scale['#13212']'ta
                // GroupValue2---> ]
                // But i want GroupValue2--->Scale['#13212']
            }

Patrice T

Покажите пример входных строк и выборок, которые вы хотите использовать с регулярным выражением.

1 Ответов

Рейтинг:
2

Richard Deeming

Снять .* от начала и до конца вашего паттерна:

string val2 = "Content:'Scale['#13212']'ta";
Match match2 = Regex.Match(val2, @"'(.*)'");
if (match2.Success)
{
    string value2 = match2.Value;
    string GroupValue2 = match2.Groups[1].Value;
    Console.WriteLine(value2);
    Console.WriteLine(GroupValue2);
}
Выход:
'Scale['#13212']'
Scale['#13212']