如何通过名称分组匹配获得价值?

时间:2010-01-06 12:13:47

标签: c# regex

    string input = "aaaabbbccc12345677XXXXsfsfsrfsd";
    MessageBox.Show(Regex.Match(input, "7(?<x1>.*)s").Groups["x1"].Value);

那个结果


7XXXXsfsfsrf

确定

但我只想要XXXX Value?

   MessageBox.Show(Regex.Match(input, ".*7(?<x1>.*?)s").Groups["x1"].Value);

3 个答案:

答案 0 :(得分:1)

"7(?<x1>.*)s"

您需要使用正确的语法:命名组的方式与(?<NameHere>ExpressionHere)类似,例如参见herehere

答案 1 :(得分:0)

你可以要求你的正则表达式不要太贪心

"7(?<x1>.*?)s"

答案 2 :(得分:0)

请记住,正则表达式具有最左边的语义。你似乎想要最左边的最开始,所以拼写

MessageBox.Show(Regex.Match(input, "^.*7(?<x1>.*?)s").Groups["x1"].Value);

子模式^.*7表示“从字符串中的最后一个7开始...”请注意,插入符号(字符串的开头)是多余的,但我喜欢使用它来强调{{1意思是最后^.*x

相反,x表示匹配尽可能少的字符,从无字符开始。