1

如果我的输入字符串是~!@#$%^&*()_+{}:"<>?

如何使用正则表达式获取每个特殊字符的计数?例如:

Regex.Matches(inputText, "each special character").Count;
4

6 回答 6

3

这应该是您问题的答案:

Regex.Matches("Little?~ birds! like to@ sing##", "[~!@#$%^&*()_+{}:\"<>?]").Count

Count 应该返回 6 个匹配项,将句子更改为其他变量或其他内容。

您可以在此处找到有关正则表达式的更多信息: http ://www.zytrax.com/tech/web/regex.htm

此致!

于 2013-10-09T15:31:40.230 回答
3

与其考虑每个特殊字符并将它们相加,不如换一种方式;计算每个字母/数字并从计数中减去它们。

你可以用一个简单的单线做到这一点:

string input = "abc?&;3";
int numberOfSpecialCharacters = input.Length - input.Count(char.IsLetterOrDigit); //Gives 3

您也可以更改为

int numberOfSpecialCharacters = input.Count(c => !char.IsLetterOrDigit(c));
于 2013-10-09T15:31:57.087 回答
1

正则表达式不是做到这一点的最佳方式。这是Linq基于的解决方案

string chars = "~!@#$%^&*()_+{}:\"<>?";
foreach (var item in chars.Where(x=> !char.IsLetterOrDigit(x)).GroupBy(x => x))
{
    Console.WriteLine(string.Format("{0},{1}",item.Key,item.Count()));
}

我知道您需要计算每个 spl 字符数。纠正我如果我错了。

于 2013-10-09T15:31:42.557 回答
0

如果您想遵循其他方法,则可以使用。

string str =  "@123:*&^789'!@#$*()_+=";
            int count = 0;
            foreach (char c in str)
            {
                if (!char.IsLetterOrDigit(c.ToString(),0))
                {
                    count++;
                }
            }
            MessageBox.Show(count.ToString());
于 2013-10-09T15:28:01.463 回答
0

非正则表达式的方式(听起来更容易)创建一个您想要检查的字符列表并使用 Linq 来查找这些字符的数量。

string inputString = "asdf1!%jkl(!*";

List<char> charsToCheckFor = new List<char>() { '!', '@', '#', ..... };

int charCount = inputString.Count(x => charsToCheckFor.Contains(x));

我让你写下你需要检查的所有字符,因为你需要弄清楚你想要什么。

于 2013-10-09T15:32:19.747 回答
0

已经有一段时间了,我需要一个类似的答案来处理密码验证。几乎是 VITA 所说的,但这是我对其他需要它的人的具体看法:

var pwdSpecialCharacterCount = Regex.Matches(item, "[~!@#$%^&*()_+{}:\"<>?]").Count;
var pwdMinNumericalCharacters = Regex.Matches(item, "[0-9]").Count;
var pwdMinUpperCaseCharacters = Regex.Matches(item, "[A-Z]").Count;
var pwdMinLowerCaseCharacters = Regex.Matches(item, "[a-z]").Count;
于 2017-01-05T11:04:26.067 回答