match = Regex.Match(theString, @"\W|_").NextMatch();
这条线到底是做什么的?我已经读过\ W应该匹配任何非字母数字字符 - 这正是我正在寻找的。我希望能够使字符串中的字符数不是数字而不是字母。因此,例如,字符串“!> * t!%@ ^”应返回6,因为“t”是一个字母。
任何帮助将不胜感激。
答案 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