【问题标题】:Best way to do a string search and replace进行字符串搜索和替换的最佳方法
【发布时间】:2010-11-14 04:30:45
【问题描述】:

我需要编写一些代码来对字符串中的特定关键字执行 HTML 突出显示。

如果我有逗号分隔的字符串列表,并且我想为列表中的每个条目搜索并替换另一个字符串。最有效的方法是什么?

我目前正在使用拆分,然后是 foreach 和 Regex.Match。例如:

string wordsToCheck = "this", "the", "and";
String listArray[] = wordsToCheck.Split(',');
string contentToReplace = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";

foreach (string word in listArray)
{
    if (Regex.Match(contentToReplace, word + "\\s+", RegexOptions.IgnoreCase).Success)
    {
        return Regex.Replace(contentToReplace , word + "\\s+", String.Format("<span style=\"background-color:yellow;\">{0}</span> ", word), RegexOptions.IgnoreCase);
    }
}

我不确定这是最有效的方法,因为要检查的单词列表可能会很长,并且上面的代码可能是搜索和替换一堆内容的循环的一部分。

【问题讨论】:

  • 我最终使用了这个代码:Regex.Replace(contentToReplace, wordsToCheck + "\\s+", "$1 ", RegexOptions.Singleline | RegexOptions.IgnoreCase);

标签: c# string


【解决方案1】:

您可以搜索 "(this|the|end)" 并调用 Regex.Replace once 与匹配评估器,这是一种获取匹配并返回替换字符串的方法。

您可以通过获取字符串数组并在每个元素上调用 Regex.Escape 来构建匹配模式,然后使用 String.Join 将其加入 |作为分隔符。

【讨论】:

    【解决方案2】:

    如果用户可以修改 wordsToCheck,请不要这样做!

    您的方法在没有正则表达式的情况下完美运行。只需做一个普通的 String.Replace。

    如果输入是安全的,您也可以对所有关键字使用一个正则表达式,例如

    return Regex.Replace(contentToReplace, "(this|the|and)", String.Format("&lt;span style=\"background-color:yellow;\"&gt;{0}&lt;/span&gt; ", word), RegexOptions.IgnoreCase);

    其中“this|the|and”只是wordsToCheck,其中逗号替换为管道“|”。

    顺便说一句,您可能希望将列表关键字直接作为正则表达式而不是逗号分隔的列表。这将为您提供更大的灵活性。

    【讨论】:

      【解决方案3】:

      至于您对性能问题的考虑 - 其他用户告诉过使用 1 个正则表达式,他们是对的,为了获得更好的性能(理论上),您可以使用已编译的标志,尤其是您不会更改您的正则表达式,以获取更多信息您可以阅读的信息this

      【讨论】:

        猜你喜欢
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-23
        • 2011-03-25
        相关资源
        最近更新 更多