2016-11-08 158 views
1

我有一些正在使用Xeger生成一些匹配模式的字符串的正則表達式。正則表達式字母數字字符出現次數

目前我有:

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

string result = generator.Generate(); 

但是我期待限制的結果,有一個最大的2次出現的任何一個字母或數字的。例如。

aabbcc11 - 傳遞

AAA BC11 - 失敗

一個BBB CC11 - 失敗

aabb112233 - 傳遞

爲aabbcc - 失敗

一個 BB 一個 CC 一個 11 - 失敗

請告訴我用正則表達式來做到這一點最徹底的方法?

+0

語言是什麼? –

+0

@WiktorStribiżewC#我實際上使用Xeger的.Net端口(https://github.com/moodmosaic/Fare) – haddow64

+0

'string result'包含的值是什麼?一串什麼?我猜像'Regex.IsMatch(result,@「(。)(?:。* \ 1){2}」)'這樣的正則表達式可以幫助您找到「不好」的項目 - 如果它們是分開的。 –

回答

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組捕獲一個char以外換行符
  • (?:.*\1){2} - 比換行符(.*)以外的任何字符0+的2次出現({2})和在第1組(\1)捕捉到的值。
相關問題