Задать вопрос

Как сгенерировать строку из регулярного выражения на .NET?

Для генерации строк из регулярного выражения использую 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;
        }
    }
}
  • Вопрос задан
  • 491 просмотр
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@pro100Code
TechnoCraft Designer Developer
Чтобы генерировать строки из регулярных выражений без необходимости вручную проверять их валидность, ты можешь попробовать библиотеку Fare. Она создана для таких задач и работает корректно с генерацией валидных строк по регулярным выражениям.

используй Xeger generator = new Xeger(pattern);

Xeger — это класс в библиотеке Fare, который генерирует строки на основе регулярного выражения без необходимости проверять их валидность.

Таким образом, Fare избавит тебя от необходимости вручную проверять строки, и ты сразу будешь получать корректные результаты на выходе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы