0

生成在另一个字符串中找到的突出显示字符串的最佳方法是什么?

我想忽略所有不是字母数字但将它们保留在最终输出中的字符。

例如,在以下 3 个字符串中搜索“PC3000”会得到以下结果:

   ZxPc 3000L = Zx<font color='red'>Pc 3000</font>L

   ZXP-C300-0Y  =  ZX<font color='red'>P-C300-0</font>Y

   Pc3 000  =   <font color='red'>Pc3 000</font>

我有以下代码,但我可以在结果中突出显示搜索的唯一方法是删除所有空格和非字母数字字符,然后将两个字符串都设置为小写。我被困住了!

public string Highlight(string Search_Str, string InputTxt)
    {

        // Setup the regular expression and add the Or operator.
        Regex RegExp = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);

        // Highlight keywords by calling the delegate each time a keyword is found.
        string Lightup = RegExp.Replace(InputTxt, new MatchEvaluator(ReplaceKeyWords));

        if (Lightup == InputTxt)
        {
            Regex RegExp2 = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);
            RegExp2.Replace(" ", "");

            Lightup = RegExp2.Replace(InputTxt.Replace(" ", ""), new MatchEvaluator(ReplaceKeyWords));

            int Found = Lightup.IndexOf("<font color='red'>");

            if (Found == -1)
            {
                Lightup = InputTxt;
            }

        }

        RegExp = null;
        return Lightup;
    }

    public string ReplaceKeyWords(Match m)
    {
        return "<font color='red'>" + m.Value + "</font>";
    }

多谢你们!

4

2 回答 2

0

一种方法是创建一个仅包含字母数字的输入字符串版本和一个将字符位置从新字符串映射到原始输入的查找数组。然后搜索仅字母数字版本的关键字,并使用查找将匹配位置映射回原始输入字符串。

用于构建查找数组的伪代码:

cleanInput = "";
lookup = [];
lookupIndex = 0;

for ( index = 0; index < input.length; index++ ) {
    if ( isAlphaNumeric(input[index]) {
        cleanInput += input[index]; 
        lookup[lookupIndex] = index;
        lookupIndex++;
    }
}
于 2012-08-23T08:42:40.893 回答
0

[^a-z0-9]?通过在每个字符之间插入可选的非字母数字字符类 ( ) 来更改搜索字符串。而不是PC3000使用

P[^a-z0-9]?C[^a-z0-9]?3[^a-z0-9]?0[^a-z0-9]?0[^a-z0-9]?0

这匹配Pc 3000,P-C300-0Pc3 000

于 2012-08-23T08:54:32.003 回答