正则表达式 - 在第一个和最后一个单引号之间的字符串

时间:2017-05-05 09:12:43

标签: c# regex expression

我有一些字符串。我想要第一个和最后一个单引号之间的总字符串 例如:

string val = "'Scale['#13212']'";   //--->Scale['#13212']
string val2= "'Scale[#13212']";     //--->Scale[#13212
string val3="abc'23'asad";          //--->23

我使用了以下regex-@".*'(.*?)'.*",但它只显示最后两个之间的字符串。

例如:

string val = "'Scale['#13212']'";   //--->]

当我用来捕获字符串的整个值并且一个组(仅在组[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']
            }

请帮忙!

3 个答案:

答案 0 :(得分:2)

只需在引号之间使用贪婪的.*

'(.*)'

Demo

答案 1 :(得分:1)

您可以使用Positive Lookbehind和Positive Lookahead在引号之间取文字Demo

(?<=\').*(?=\')

答案 2 :(得分:0)

尝试以下

string test= "'$get this$' test value";
string getvalue = Regex.Match(test, @"\'(.*?)\'").Groups[1].ToString();