Интересный вопрос!Есть способ сделать это (но вам это не понравится).Это приводит к потенциально большому (и, возможно, медленному) регулярному выражению.Предполагая, string1
является ABCD
.Далее приведены регулярные выражения для всех требований к разной длине:
length = 4;
regex = @"
ABCD
";
length = 3;
regex = @"
ABCD?
| ABC?D
| AB?CD
| A?BCD
";
length = 2;
regex = @"
ABC?D?
| AB?CD?
| AB?C?D
| A?BCD?
| A?BC?D
| A?B?CD
";
length = 1
regex = @"
[ABCD]
";
Я не продумал, как вы собираетесь собрать эту программу программно, но я уверен, что это можно сделать.Тем не менее, большое регулярное выражение, имеющее множество альтернатив OR, может быть медленнее, чем при использовании совпадения ", а затем проверить длину подходящей строки" метод, который вы используете в настоящее время.
Я поцарапалмоя голова уже довольно долго, и я почти уверен, что нет простой / умной конструкции регулярного выражения, которая бы выполняла то, что вы просите.