ASP.Net RegEX用于精确单词搜索

时间:2011-09-05 19:37:06

标签: .net asp.net regex

我们需要首先搜索的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获得这种组合词。

4 个答案:

答案 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>这样的奇怪场景。