2015-12-30 3 views
-2

Я пытаюсь использовать RegEx класс в C# для того, чтобы решить эту проблему благородных предшественников:Получить все возможные результаты для шаблона RegEx

Учитывая RegEx модели, скажет "RK[0-2]{2}", возвращает список, содержащий все строки которые соответствуют шаблону, например[RK00, R01, RK02, RK10, RK11, RK12, RK20, RK21, RK22].

Глядя на документацию RegEx, кажется, что она может только указать, соответствует ли данная строка паттеру или найти все вхождения шаблона в строке. Но я не нашел, где RegEx может генерировать строки из шаблона ввода.

+4

И что он должен генерировать для регулярного выражения '. *'? –

+0

Что было бы результатом '. *'? – Rob

+1

, как записано (без а^в начале и $ в конце), RK [0-2] {2} тоже создаст бесконечный набор. Он также будет соответствовать «helloRK01world». –

ответ

1

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

[\s\S]* 

Это будет соответствовать буквально любой строке. Таким образом, он будет генерировать эффективно бесконечный набор результатов.

Если вы хотите сгенерировать возможные строки, вы собираетесь писать их с нуля, и я бы серьезно поставил под вопрос, почему вы это делаете. Это пахнет проблемой X/Y.

+0

Это не соответствует каждой строке ... Это соответствует только строкам из буквенных периодов и пробелов ... – d0nut

+0

@iismathwizard В регулярных выражениях C#, когда вопрос помечен, символ '.' соответствует любому одиночному символу, кроме строк новой строки. См. Https://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx# – David

+2

'[. \ S] *' соответствует нулевому или более пробелам или символам буквенного периода. '(? s). *' будет соответствовать чему угодно. –

Смежные вопросы