C# 在序列中至少查找4个非数字

C# 在序列中至少查找4个非数字,c#,regex,C#,Regex,我有一个序列,例如123a*a712,它是有效的。 我想确保只有3个字符不是数字,因为4+将使其无效 几个例子: 56+33-有效的空白也是一个字符 56+33+6-超过3个非数字字符无效 错误-无效 1234-有效 谢谢大家! 不需要使用正则表达式 bool IsValid = "123a*a712".Count(x => !char.IsDigit(x)) < 4; 使用助手: public static class String { public static boo

我有一个序列,例如123a*a712,它是有效的。 我想确保只有3个字符不是数字,因为4+将使其无效

几个例子:

56+33-有效的空白也是一个字符

56+33+6-超过3个非数字字符无效

错误-无效

1234-有效


谢谢大家!

不需要使用正则表达式

bool IsValid = "123a*a712".Count(x => !char.IsDigit(x)) < 4;
使用助手:

public static class String
{
    public static bool containsAtLeastXNonDigit(string s, int nbOfDigit)
    {
        return s.Count(!char.IsDigit) >= nbOfDigit;
    }
}

并使用它:String.containsAtleastTXNondightTest,4

如果您确实需要正则表达式解决方案,您可以选择

^(\d*[^\d]?){0,3}\d*$
它最多可以匹配三个非数字

我想确保只有3个字符不是 数字,因为4+将使其无效

编辑


刚刚意识到,同样可以通过str.Count实现!char.isDigit

让我们看看你迄今为止做了什么/尝试了什么。这不是“让其他人做你的工作”服务使用此正则表达式[0-9]*\D\D\D[0-9]+*来compate@CSharpie我有过不同的小尝试,当我决定转到这里时,它已经经过了不同的更改,因此为没有发布这些尝试表示歉意。效果同样好,但我个人更喜欢@fubo发布的LINQ方法,谢谢你的回答!
public static int countNonDigit(string str) {
  return (str.Length - str.Count(char.isDigit))
}

if (countNonDigit(str) >= 4) {
  // not valid
}