Определение типа ввода для любого регулярного выражения - PullRequest
3 голосов
/ 19 января 2012

У меня есть длинный список регулярных выражений, которые нужно проверить Вместо того, чтобы идти по списку один за другим и писать подходящий тест для каждого выражения - если это возможно - я хочу создать функцию генератора, которая будет учитывать тип регулярного выражения и генерировать соответствующую входную строку.

Например:

rgx = re.compile(r'^item_(?P<item_number>\d+)$')

Можно ли определить тип ввода, которому будет соответствовать регулярное выражение? Учитывая приведенный выше пример, возможно ли определить входные данные (например, item_23567), которые необходимы регулярному выражению из скомпилированного регулярного выражения?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

невозможно в общем смысле для расширенных регулярных выражений, см., Например,

Все ли регулярные выражения останавливаются?

, что наиболее важно, если у вас был оракул, который генерировал некоторые неясные,извилистый текст, который соответствует любому регулярному выражению, кто бы вы использовали его в качестве теста?как вы можете узнать, если данный мегабайт текстового мусора на самом деле соответствует заданному регулярному выражению или должен совпадать?

0 голосов
/ 24 января 2012

Этот ответ хорошо подходит для абстрактного определения проблемы: https://stackoverflow.com/a/208112/1092724

Решения Python: Сторнирование регулярного выражения в Python

Решение для библиотеки Java: http://code.google.com/p/xeger/

Эти решения не без ограничений: см. http://code.google.com/p/xeger/wiki/XegerLimitations

Извлечение из комментария, сделанного на странице ограничений Xeger

"Стоит отметить, что текущая реализация xeger случайным образом пересекает fsm для генерации его строк. Если у вас есть регулярные выражения с символами, совпадающими после. , переходы добавляются обратно в состояние для. для каждого отдельного состояния впоследствии. С каждым состоянием после. становится все более маловероятным, что xeger когда-либо достигнет принимающего состояния. "

(@ Highly Irregular) выразили аналогичную озабоченность в своем комментарии.

Это общая тема среди всех реализаций, которые вы найдете. Решения будут хорошо работать только с тщательно составленными выражениями. В противном случае ваш код может отправиться в бесконечное путешествие, так и не найдя того, что вы ищете. Если то, что вам нужно, действительно регулярно и четко определено, один из этих подходов может работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...