count occurrences in a string similar to run length encoding c# -


say have string like

mystring1 = "ababababab"; mystring2 = "abcdabcdabcd"; mystring3 = "abcaabcaabcaabca"; mystring4 = "ababacac"; mystring5 = "aaaaabbbbb"; 

and need following output

output1 = "5(ab)"; output2 = "3(abcd)"; output3 = "4(abca)"; output4 = "2(ab)2(ac)"; output5 = "5(a)5(b)"; 

i have been looking @ rle can't figure out how above. code have been using is

public static string encode(string input) {     return regex.replace(input, @"(.)\1*", delegate(match m)     {         return string.concat(m.value.length, "(", m.groups[1].value, ")");     }); } 

this works output5 can other outputs regex or should using linq?

the purpose of code display mystring in simple manner can mystring being 1000 characters pattern it.
not worried speed.

here non-regex way given data provided. i'm not sure of edge cases, right now, trip code up. if so, i'll update accordingly.

string mystring1 = "ababababab"; string mystring2 = "abcdabcdabcd"; string mystring3 = "abcaabcaabcaabca"; string mystring4 = "ababacac"; string mystring5 = "aaaaabbbbb";  countgroupoccurrences(mystring1, "ab"); countgroupoccurrences(mystring2, "abcd"); countgroupoccurrences(mystring3, "abca"); countgroupoccurrences(mystring4, "ab", "ac"); countgroupoccurrences(mystring5, "a", "b"); 

countgroupoccurrences() looks following:

private static void countgroupoccurrences(string str, params string[] patterns) {     string result = string.empty;     while (str.length > 0)     {         foreach (string pattern in patterns)         {             int count = 0;             int index = str.indexof(pattern);              while (index > -1)             {                 count++;                 str = str.remove(index, pattern.length);                 index = str.indexof(pattern);              }             result += string.format("{0}({1})", count, pattern);         }     }     console.writeline(result); } 

results:

5(ab) 3(abcd) 4(abca) 2(ab)2(ac) 5(a)5(b) 

update

this worked regex

private static void countgroupoccurrences(string str, params string[] patterns) {     string result = string.empty;     foreach (string pattern in patterns)     {         result += string.format("{0}({1})", regex.matches(str, pattern).count, pattern);     }     console.writeline(result); } 

Comments