2009-07-26 64 views
2

我需要编写一些代码,在字符串中的特定关键字上执行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); 
    } 
} 

我不知道这是最有效的方式,因为单词的列表来检查可以得到长期和上面的代码可能是一个循环的一部分,搜索和替换一堆内容。

+0

看到http://stackoverflow.com/questions/711753/a-better-way-to-replace-many-strings-obfuscation-in-c – 2009-07-26 18:43:36

回答

1

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

你的方法在没有正则表达式的情况下完美运行。只要做一个正常的String.Replace。

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

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

哪里“这个|的|和”简直是wordsToCheck在逗号与管内容替换“|”。

顺便说一句,您可能想直接将列表关键字作为正则表达式而不是逗号分隔列表。这会给你更多的灵活性。

0

您可以搜索“(this | the | end)”并用匹配评估程序调用Regex.Replace 一次,匹配评估程序是一种方法,它接受匹配并返回替换字符串。

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

0

关于性能问题的考虑 - 其他用户告诉我们使用1个正则表达式,他们是正确的,为了更好的性能(理论上),你可以使用编译标志,特别是你不会改变你的正则表达式,因为更多信息你可以阅读this