替换Case不敏感的StringBuilder

时间:2016-09-14 17:45:55

标签: c# html regex stringbuilder

在多次替换需要时,我已多次阅读过使用Stringbuilder与字符串的优点。我需要将一个HTML字符串(所有非常简单的格式)转换为WIKI表示法,并且我将从我在SO上找到的代码中推出自己的字符串。我想知道是否有更简单的方法来做到这一点,以及我如何用它来实现StringBuilder的好处。我现在所有的尝试都失败了。请提前告知并提前感谢。

    public static string ConvertHTML2WIKInotation(string htmlstring)
        {
            StringBuilder sb = new StringBuilder(htmlstring);

            htmlstring = ReplaceInsensitive(htmlstring, "<hr>", "----");
            htmlstring = ReplaceInsensitive(htmlstring, "<hr />", "----");
            ... etc.

            return sb.ToString();
        }

        static public string ReplaceInsensitive(this string str, string from, string to)
        {
            str = Regex.Replace(str, from, to, RegexOptions.IgnoreCase);
            return str;
        }

2 个答案:

答案 0 :(得分:0)

stringbuilder的好处是你不会在每次更换时都创建一个新的字符串。您的实施并不受益于此属性。 如果你使用stringbuilder,实际上在stringbuilder上进行转换,而不是在输入字符串参数上进行转换:

    public static string ConvertHTML2WIKInotation(string htmlstring)
    {
        StringBuilder sb = new StringBuilder(htmlstring);

        sb.Replace("<hr>", "----");
        sb.Replace("<hr />", "----");

        return sb.ToString();
    }

如果需要不区分大小写,请查看: How to do a multiple case insensitive replace using a StringBuilder

答案 1 :(得分:0)

由于html标签不区分大小写,我建议使用非StringBuilder,因为不建议在需要更多替换字符串的情况下使用SB。

public static string ReplaceMultiple(
          string template, 
          IEnumerable<KeyValuePair<string, string>> replaceParameters)
{
   var result = template;

   foreach(var replace in replaceParameters)
   {
      var templateSplit = Regex.Split(result, 
                                    replace.Key, 
                                    RegexOptions.IgnoreCase);
      result = string.Join(replace.Value, templateSplit);
   }

   return result;
}