正则表达式,用于限制字符串中特定字符的出现次数

时间:2014-02-18 20:03:12

标签: c# regex

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

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

这可能吗?

2 个答案:

答案 0 :(得分:5)

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

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

http://rubular.com/r/X5iz5dHzgs

答案 1 :(得分:4)

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

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

    要解决2.问题,C#没有通用的方法。简单地说,必然会有某些东西迫使这些限制。最简单的方法是创建具有检查设置约束的属性的类(因此它是强制约束的属性):

    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);
            }
        }
    }
    

    由于text是私有的,因此没有其他方法来设置它而不是属性,它会检查您的约束。这当然可以进一步改进,例如通过创建一组可重用的规则等。

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