我有一些正则表达式,我正在使用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 - 失败
用正则表达式做最干净的方法是什么?
答案 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
)中捕获的值。