我需要编写一些代码,对字符串中的特定关键字执行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 :(得分:1)
如果用户可以修改wordsToCheck,请不要这样做!
如果没有正则表达式,您的方法可以完美运行。只需做一个普通的String.Replace。
如果输入是安全的,您还可以为所有关键字使用一个正则表达式,例如
return Regex.Replace(contentToReplace, "(this|the|and)", String.Format("<span style=\"background-color:yellow;\">{0}</span> ", word), RegexOptions.IgnoreCase);
其中“this | the | and”只是wordsToCheck
,其中逗号替换为管道“|”。
顺便说一下,您可能希望将列表关键字直接作为正则表达式而不是以逗号分隔的列表。这将为您提供更大的灵活性。
答案 1 :(得分:0)
您可以搜索“(this | the | end)”并使用匹配评估程序调用Regex.Replace 一次,该方法接受匹配并返回替换字符串。
您可以通过获取字符串数组并在每个元素上调用Regex.Escape来构建匹配模式,然后使用String.Join将其连接到作为分隔符。
答案 2 :(得分:0)
至于你对性能问题的考虑 - 其他用户告诉我们使用1个正则表达式,并且它们是正确的,为了更好的性能(理论上)你可以使用编译标志,特别是你不会改变你的正则表达式,更多您可以阅读的信息this。