.NET正则表达式问题

时间:2011-06-14 19:26:27

标签: .net regex

有人可以解释为什么第一个正则表达式组中包含“1”而不是第二个吗?

Match match = Regex.Match("q10", @"(\w+)(\d+)");
//Ugh, Regex group indicies are 1-based not 0-based.
Console.WriteLine(match.Groups[1].Value); //Expected "q" got "q1"
Console.WriteLine(match.Groups[2].Value); //Expected "10" got "0"

2 个答案:

答案 0 :(得分:2)

正则表达式贪婪地匹配,因此(\w+)涵盖(\d+)之前的尽可能多的内容。由于1是一个单词字符,因此\w会在第一个组中捕获它。

您可以使用以下方式捕捉您想要的方式:

Match match = Regex.Match("q10", @"([a-z]+)(\d+)");

答案 1 :(得分:2)

\w匹配alpha 数字字符(和下划线)。

您想要[A-Za-z]