Найти самую длинную последовательность, состоящую из одинаковых символов при помощи Regular Expressions

Мне нужно в определенной строке найти самую длинную последовательность, состоящую из одинаковых символов используя только Regular Expressions. Возможно ли вообще это сделать?

Пример: найти длину максимальной цепочки, состоящей из символов С

string s = "AACCCCJDKSJKACCCCCK";
int max  = // TODO: some code
Console.WriteLine(max); //5

Ответы (2 шт):

Автор решения: Alexander Petrov

Могу предложить следующее:

string s = "AACCCCJDKSJKACCCCCK";
int max = 0;
var regex = new Regex(@"(.)\1*");

foreach (Match match in regex.Matches(s))
{                
    if (max < match.Value.Length)
        max = match.Value.Length;
}

Console.WriteLine(max); //5

Используем группировку с обратной связью.

(.) - группа, находящая один любой символ
\1 - совпадение с ранее найденной группой под номером 1
* - любое количество раз

Никаких особых преимуществ от использования регулярок тут нет. Всё равно приходится использовать цикл.

→ Ссылка
Автор решения: aepot
static void Main(string[] args)
{
    string text = "AACCCCJDKSJKACCCCCK";
    var sequences = Regex.Matches(text, @"(\w)\1*").Select(m => m.Value);
    Console.WriteLine(string.Join(Environment.NewLine, sequences.Select((x, i) => $"{i}: {x}")));
    int max = sequences.Select(x => x.Length).Max();
    Console.WriteLine($"Max: {max}");
    Console.ReadKey();
}

Вывод в консоль

0: AA
1: CCCC
2: J
3: D
4: K
5: S
6: J
7: K
8: A
9: CCCCC
10: K
Max: 5

Ну а если прямо ответить без демонстрации, то

int max = Regex.Matches(s, @"(\w)\1*").Select(m => m.Value.Length).Max();
→ Ссылка