我们需要首先搜索的HTML字符串,并在HTML文本
中突出显示该字词让我们说我们需要搜索“美国政府”,它可以是任何一种格式
EG。
American Government
<span>American</Span> <Span>Government</span>
<span>American Government</span>
<span>American </span> Government
我们需要REGEX来搜索HTML以找出这样的组合,这些组合将在REGEX中为我们提供所有匹配。
在不删除TAG的情况下,我们仍然可以搜索关键字,并在此匹配时添加一些额外的标记。
我们需要REGEX来了解如何从HTML获得这种组合词。
答案 0 :(得分:4)
我们需要REGEX来搜索HTML
哦不,请相信我don't need that。您需要一个HTML解析器,例如Html Agility Pack。
答案 1 :(得分:0)
这是一个棘手的问题。我觉得这样的事情?
(<[^>]*>)?(\s)?(American)(\s)?(\</[^>]*>)?(\s)?(<[^>]*>)?(\s)?(Government)(\s)?(</[^>]*>)?
答案 2 :(得分:0)
我不太确定你想要匹配什么。此正则表达式将返回第二个匹配组中的 American 和第三个匹配组中的 Government 。
(?ixs)(American)(?:(?!Government).)*(Government)
答案 3 :(得分:0)
您需要将搜索字词重新格式化为一种模式。
string HighlightSearchTerm( string source, string term )
{
Regex regex;
string[] values;
string pattern;
values = term.Split( ' ' );
if ( values.Length > 1 )
{
pattern = String.Format(
"({0})|({1})",
term,
String.Join( @")(?=\s*<[^>]+>\s*)(.+?)(", values ) );
}
else
{
pattern = "(" + term + ")";
}
regex = new Regex( pattern );
return regex.Replace( source, AddTags );
}
然后你的MatchEvaluator需要补偿变长组。
string AddTags( Match match )
{
string result;
if ( match.Groups[1].Length > 0 )
{
return "<newtag>" + match.Groups[1] + "</newtag>";
}
result = "";
for ( int index = 2; index < match.Groups.Count; index+=2 )
{
result += "<newtag>" + match.Groups[index] + "</newtag>" +
match.Groups[index + 1];
}
return result;
}
输入验证和优化留给读者练习。这也不会处理像A<span>merican Government</span>
这样的奇怪场景。