正则表达式限制字母数字字符的出现次数

时间:2016-11-08 14:54:27

标签: regex

我有一些正则表达式,我正在使用Xeger生成一些匹配模式的字符串。

目前我有:

Xeger generator = new Xeger("[a-zA-Z]{8,16}[0-9]{1,6}");

string result = generator.Generate();

但是我希望将结果限制为最多出现2个字母或数字。 E.g。

  

aabbcc11 - 传递

     

aaa bc11 - 失败

     

bbb cc11 - 失败

     

aabb112233 - 传递

     

aabbcc 111 - 失败

     

a bb a cc a 11 - 失败

用正则表达式做最干净的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用Regex.IsMatch(result, @"(.)(?:.*\1){2}")过滤掉“不良”候选人:

List<string> results = new List<string>();
...
string result = generator.Generate();
if (!Regex.IsMatch(result, @"(.)(?:.*\1){2}")) {
    results.Add(result);
}

pattern demo。详细说明:

  • (.) - 第1组捕获新行以外的字符
  • (?:.*\1){2} - 除了换行符({2})之外的任何0 +字符的2次出现(.*)和在第1组(\1)中捕获的值。