Мне нужно написать функцию замены строки с поддержкой пользовательских подстановочных знаков. Я также должен быть в состоянии избежать этих символов. В настоящее время у меня есть подстановочный класс со свойствами Usage, Value и Escape.
Допустим, у меня есть глобальный список с именем Wildcards . В Wildcards добавлен только один участник:
Wildcards.Add(new Wildcard
{
Usage = @"\Break",
Value = Enviorement.NewLine,
Escape = @"\\Break"
});
Так что мне нужен метод CustomReplace, чтобы сделать трюк. Я должен заменить указанный параметр в данной строке другой, такой же как string.Replace
. Единственная разница здесь в том, что он должен использовать мои пользовательские шаблоны.
string test = CustomReplace("Hi there! What's up?", "! ", "!\\Break");
// Value of the test variable should be: "Hi there!\r\nWhat's up?"
// Because \Break is specified in a custom wildcard in Wildcards
// But if I use the value of the wildcard's Escape member,
// it should be replaced with the value of Usage member.
test = CustomReplace("Hi there! What's up?", "! ", "!\\\\Break");
// Value of the test variable should be: "Hi there!\\BreakWhat's up?"
Мой текущий метод не поддерживает escape-строки.
Это также не может быть хорошим, когда дело доходит до производительности, так как я вызываю строку. Замените два раза, и каждый из них ищет всю строку, я думаю.
// My current method. Has no support for escape strings.
CustomReplace(string text, string oldValue, string newValue)
{
string done = text.Replace(oldValue, newValue);
foreach (Wildcard wildcard in Wildcards)
{
// Doing this:
// done = done.Replace(wildcard.Escape, wildcard.Usage);
// ...would cause trouble when Escape contains Usage.
done = done.Replace(wildcard.Usage, wildcard.Value);
}
return done;
}
Итак, мне нужно написать метод замены, который ищет строку char по char с логикой, чтобы найти и разделить значения Usage и Escape, а затем заменить Escape на Usage при замене Usage другой данной строкой?
Или вы знаете уже написанное?
Могу ли я использовать регулярные выражения в этом scenerio?
Если я могу, то как? (Не имею опыта в этом, шаблон был бы неплох)
Если я это сделаю, будет ли он быстрее или медленнее, чем char при поиске символов?
Извините за длинный пост, я постарался сделать его понятным и извините за любые опечатки и тому подобное; это не мой основной язык. Заранее спасибо.