Рассмотрим два регулярных выражения:Заменить регулярное выражение с регулярным выражением
var regex_A = "Main\.(.+)\.Value";
var regex_B = "M_(.+)_Sp";
Я хочу, чтобы иметь возможность заменить строку, используя regex_A в качестве входных данных, и regex_B как строка замены. Но и наоборот. И без, предоставляя дополнительную информацию, такую как строка формата для каждого регулярного выражения.
В частности, я хочу создать строку replace_B из строки input_A. Итак:
var input_A = "Main.Rotating.Value";
var replaced_B = input_A.RegEx_Awesome_Replace(regex_A, regex_B);
Assert.AreEqual("M_Rotating_Sp", replaced_B);
И это также должно работать в обратном направлении (то причина я не могу использовать простой string.format для regex_B). Потому что я не хочу предоставлять строку формата для каждого регулярного выражения (я ленив).
var input_B = "M_Skew_Sp";
var replaced_A = input_B.RegEx_Awesome_Replace(regex_B, regex_A);
Assert.AreEqual("Main.Skew.Value", replaced_A);
У меня нет понятия, существует ли это, или как его называть. Поиск в Google обнаруживает, что меняют все виды других регулярных выражений ... не этот.
Update:
Поэтому в основном я нужен способ, чтобы преобразовать регулярное выражение в строку формата.
var regex_A_format = Regex2Format(regex_A);
Assert.AreEqual("Main.$1.Value", regex_A_format);
и
var regex_B_format = Regex2Format(regex_B);
Assert.AreEqual("M_$1_Sp", regex_B_format);
Так что если RegEx_Awesome_Replace и/или функция Regex2Format выглядеть?
Update 2:
Я думаю, RegEx_Awesome_Replace должен выглядеть примерно так (с помощью кода из ответов ниже):
public static class StringExtenstions
{
public static string RegExAwesomeReplace(this string inputString,string searchPattern,string replacePattern)
{
return Regex.Replace(inputString, searchPattern, Regex2Format(replacePattern));
}
}
Что бы оставить Regex2Format как открытый вопрос.
ли Regex2Format (replacePattern) возвращает строку или другой заменить шаблон? Если он возвращает форматированную строку, как вы хотите, чтобы строка была отформатирована? и где находится информация о * форматах *? Если вы хотите, чтобы формат находился в 'replacePattern', как он выглядит? – ANewGuyInTown
Вы сузили свое требование к разрешимой проблеме? –
Нет, я не думаю, что регулярные выражения действительно решают любую проблему реальной жизни. Имеет смысл более просто определить оба выражения. –