2013-09-17 3 views
1

У меня есть строки регулярных выражений, которые я хотел бы передать другим методам внутри массива (или какой-либо другой коллекции).Сохранение строк шаблонов регулярных выражений в массиве

Основываясь на комментариях, мой первоначальный вопрос был недостаточно ясным. Вот блок-тест, который точно объясняет, что я пытаюсь сделать.

Короче говоря, я пытаюсь заменить подстроку (на основе шаблона регулярного выражения) другим шаблоном регулярного выражения.

 var mainPattern = @"\{[\w]*\}"; 
     string replacePattern = @"\d{4}"; 

     var patternArray = new string[] { replacePattern }; 
     // patternArray[0] == "\\d{4}" 

     string input = "fd/{ddf}/dfdf"; 
     string expected = @"fd/\d{4}/dfdf"; 

     var match = Regex.Match(input, mainPattern); 
     // match.Value == "{ddf}" 
     var output = Regex.Replace(input, match.Value, patternArray[0]); 
     // output == "fd/\\d{4}/dfdf" 

     Assert.AreEqual(expected, output);  

Проблема заключается в конечной продукции, где она содержит двойную обратную косую черту (потому что это, как заменить строку выглядит).

Надеюсь, проблема станет более ясной.

Я думаю, что я слишком много усложняю. Я не знаком со всеми функциями Regex?

+3

' "\\" и' @ "\" 'одинаковы. 'string regex = @" \ d {4} ";' является вполне допустимым регулярным выражением. –

+1

Альтернативно, вы можете использовать массив Regex. – Jacob

+1

Я думаю, что строка просто преобразуется из стенографической строки в обычную, чтобы быть сохраненной в массиве как строка. Я не думаю, что это вызывает вашу проблему. Пожалуйста, покажите полный код, потому что 'Regex.Replace (ввод строки, строковый шаблон, замена строки)' Я не уверен, что это соответствует вашему 'Regex.Replace (inputstring, соответствует [i] .Value, patterns [i]) ' – stema

ответ

1

Я не думаю, что это ваша проблема - двойная слэш - это артефакт VS отладчика , эквивалентный вашей стенографической строке.

Если вы нажмете маленькое увеличительное стекло для «текстового визуализатора», вы увидите, что на нем нет двойных слэшей.

alt text

+0

Не очень уверен. Когда я использую его в замене, он рассматривает обратную косую черту. – Ronald

1

Как странно, как это может выглядеть, на мой тест он работал как шарм. Какую версию .NET и Visual Studio вы используете?

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