Вы не должны экранировать проверяемую строку (testString
), поскольку это может ее изменить.
Вы можете использовать символ @
, чтобы сделать следующую строку литералом (например, @"\r"
будетбыть отмечены как обратный слеш и символ r, а не как символ возврата каретки).Даже при этом буквенные обратные слэши в регулярном выражении должны быть экранированы как \\
.
Чтобы вывести более одной строки с помощью Console.WriteLine (), вам необходимо объединить их с помощью +
.
static void Main(string[] args)
{
string[] testStrings = new string[] { @"w:\WES\1234", @"w:\WES\4567", @"w:\WES\856432", @"w:\WES\AdK1234qw", @"w:\WES\abcdesf"};
Regex re =new Regex(@"^w:\\WES\\[0-9]{4}$");
foreach (var testString in testStrings)
{
Match match = re.Match(testString);
if (match.Success)
{
Console.WriteLine("teststringcorrect " + match.Value);
}
}
Console.ReadLine();
}
Выходы:
teststringcorrect w:\WES\1234
teststringcorrect w:\WES\4567
Исходя из этого, если у вас есть каталог и вы хотите найти его подкаталоги, которые имеют имена ровно из четырех цифр, вы можете сделать что-то вроде:
string root = @"C:\temp";
Regex re = new Regex("^" + Regex.Escape(root) + @"\\[0-9]{4}$");
var dirs = Directory.EnumerateDirectories(root).Where(d => re.IsMatch(d));
Console.WriteLine(string.Join("\r\n", dirs));
, которые могут выдать
C:\temp\4321
C:\temp\9876