Для генерации строк из регулярного выражения использую RexEngine из AutomataDotNet.
Но он не всегда генерирует валидные строки (проверяю результат им же и OOTB Regex).
Какой библиотекой посоветуете пользоваться для этой задачи?
Сейчас код выглядит так, но хочется избавиться от проверки генерации на валидность:
public static IEnumerable<string> GenerateValidStrings(string pattern, int count = 10, RegexOptions options = RegexOptions.None)
{
var rex = new Microsoft.Automata.Rex.RexEngine(Microsoft.Automata.BitWidth.BV16);
var dotnetRegex = new Regex(pattern, options);
var sfa = rex.CreateFromRegexes(options, pattern);
var old = new HashSet<string>();
while (true)
{
string member = rex.GenerateMember(sfa);
if (!dotnetRegex.IsMatch(member)) continue;
int tryCount = Math.Min(100 + old.Count, 200);
if (old.Contains(member))
{
tryCount--;
if (tryCount == 0)
{
throw new InvalidOperationException("can't generate new unique strings");
}
continue;
}
old.Add(member);
yield return member;
if (old.Count == count)
{
break;
}
}
}