在C#中使用Regex遇到麻烦

时间:2011-11-19 22:41:15

标签: c# .net regex

match = Regex.Match(theString, @"\W|_").NextMatch();

这条线到底是做什么的?我已经读过\ W应该匹配任何非字母数字字符 - 这正是我正在寻找的。我希望能够使字符串中的字符数不是数字而不是字母。因此,例如,字符串“!> * t!%@ ^”应返回6,因为“t”是一个字母。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

不需要正则表达式来计算非字母数字字符。试试这个:

int count = ((IEnumerable<char>)s).Count(c => !char.IsLetterOrDigit(c));

答案 1 :(得分:3)

在我看来,正则表达式是一种矫枉过正的行为:

    int count = 0;
    foreach (var c in subjectString)
    {
        if (!char.IsLetterOrDigit(c)) count++;
    }
    Console.WriteLine("{0}", count);

那将有相同的结果。

答案 2 :(得分:1)

你的正则表达式应该符合你想要的(假设你可以忽略标点符号,连接器类别中的其他字符),这是正确的。

要获得匹配数,您可以执行以下操作:

Regex.Matches(theString, @"\W|_").Count

答案 3 :(得分:0)

该行/应该/匹配任何单个非单词字符。但是,我相信你只匹配其中一个。你需要将它放在while循环中并添加一个计数器,或者找出你的语言如何“全局”匹配正则表达式。查看Matches方法,它允许您执行此操作:http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.matches.aspx