C# Regex限制字符串中特定字符的出现次数

C# Regex限制字符串中特定字符的出现次数,c#,regex,C#,Regex,是否可以仅使用正则表达式来限制字符串中特定字符的出现次数 例如,我想将字符串中$或%或空格的出现次数限制为最多5次 这可能吗?试试这个表达式。在这种情况下,您限制的字符是A /^([^A]*A[^A]*){0,5}$/ 通常,您必须将问题分为两个不同的方面: 如何检查是否满足某些约束(例如,$字符的出现次数不大于5) 如何强制执行该约束 解决1。问题是,您当然可以使用正则表达式。例如,正则表达式\d{6,}可以检查是否有6个或更多数字 解决2。问题是,C#对此没有通用方法。简单地说,一定有什么东

是否可以仅使用正则表达式来限制字符串中特定字符的出现次数

例如,我想将字符串中
$
%
空格
的出现次数限制为最多5次


这可能吗?

试试这个表达式。在这种情况下,您限制的字符是
A

/^([^A]*A[^A]*){0,5}$/


通常,您必须将问题分为两个不同的方面:

  • 如何检查是否满足某些约束(例如,
    $
    字符的出现次数不大于5)
  • 如何强制执行该约束
  • 解决1。问题是,您当然可以使用正则表达式。例如,正则表达式
    \d{6,}
    可以检查是否有6个或更多数字

    解决2。问题是,C#对此没有通用方法。简单地说,一定有什么东西在强迫约束。最简单的方法是使用检查设置约束的属性创建类(因此强制约束的是属性):

    由于
    text
    是私有的,因此除了按属性设置之外,没有其他方法可以设置它,属性检查约束。这当然可以进一步改进,例如通过创建可重用规则集等


    如果有其他对象管理您的类,例如一些管理数据实体的数据提供程序,您可以使用属性化方法。

    Regex是模式匹配。因此,您可以很容易地判断一个字符串中是否有超过5个
    $
    ,但我不确定限制出现次数是什么意思。@paqogomez字符串中这些单个字符的计数不应超过5个
    public class SomeTestClass
    {
        private string text;
        public string Text 
        { 
            get
            {
                return text;
            }
            set
            {
                CheckConstraints(value, "Text");
                text = value;
            }
        }
    
        private void CheckConstraints(string value, string param)
        {
            if (Regex.IsMatch(value, @"\d{6,}"))
            {
                throw new ArgumentException("Argument do not match the constraint", param);
            }
        }
    }