Я предлагаю использовать Linq вместо регулярных выражений , например:
string source = @"zf3kabxcde224lkzf3mabxc51+crsdtzf3nab=";
int size = 3;
var result = Enumerable
.Range(0, source.Length - size + 1)
.GroupBy(i => source.Substring(i, size))
.Where(chunk => chunk.Count() > 1)
.Select(chunk => $"'{chunk.Key}' appears {chunk.Count()} times");
Console.Write(string.Join(Environment.NewLine, result));
Результат:
'zf3' appears 3 times
'abx' appears 2 times
'bxc' appears 2 times
[ 1112] Обратите внимание, что на самом деле у нас есть два разных фрагмента (abx
и bxc
), которые появляются дважды.
Linq очень гибок, поэтому вы можете легко сделать запрос другим способом, например
var result = Enumerable
.Range(0, source.Length - size + 1)
.GroupBy(i => source.Substring(i, size))
.Where(chunk => chunk.Count() > 1)
.GroupBy(chunk => chunk.Count(), chunk => chunk.Key)
.OrderBy(chunk => chunk.Key)
.Select(chunk => $"Appears: {chunk.Key}; patterns: {string.Join(", ", chunk)}");
Console.Write(string.Join(Environment.NewLine, result));
Результат:
Appears: 2; patterns: abx, bxc
Appears: 3; patterns: zf3
Не может D выполнять прямые вызовы в код C? Или Вы ищете библиотеку, записанную в D?
dsource.org/projects уже упоминался в этой ветке раньше, вот несколько деталей.
Вот привязки языка D для Научной библиотеки GNU (GSL) .
Вот ссылка на GSL .
Вот несколько ссылок на документацию по поддержке BLAS , декомпозиции ( 1 , 2 ), собственных систем , в GSL.