【问题标题】:Regex Replace Case Insensitivty Issue正则表达式替换不区分大小写问题
【发布时间】:2009-12-14 15:50:20
【问题描述】:

我正在实施网站搜索,并尝试使用以下代码突出显示用户搜索的单词:

data = Regex.Replace(data, Model.SearchCriteria, "<strong>" + Model.SearchCriteria + "</strong>", RegexOptions.IgnoreCase);

但是,如果数据是“我向北前往加拿大”并且用户搜索了“向北”,结果将显示“我向北前往加拿大”并突出显示北部,但实际数据已被稍微错误地替换。

如何在突出显示用户搜索内容的同时保持返回的数据完整?

【问题讨论】:

    标签: c# .net asp.net regex


    【解决方案1】:

    在这种情况下,您需要使用替换模式将原始文本放入替换的字符串中而不是显式搜索条件

    data = Regex.Replace(
      "("+Model.SearchCriteria+")",
      "<strong>$1</strong>",
      RegexOptions.IgnoreCase);
    

    在搜索条件周围加上括号会将其放入一个未命名的组中。然后,您可以使用$1 在替换字符串中按索引引用此组。这将使用原始匹配文本。

    Regex.Replace 中的替换字符串信息

    【讨论】:

    • 你不能只使用应该包含整个匹配项的$0 - 不需要添加括号吗?
    【解决方案2】:

    您将文档中的“North”替换为搜索字符串“north”。尝试将其替换为匹配的短语而不是搜索短语。

    【讨论】:

    • 不确定您是否正确阅读了我的问题。我知道北方正在被替换为北方。
    【解决方案3】:

    试试这个:

    Regex.Replace("I went North towards Canada", "(" + "north + ")", (Match match) =>
    {
        return "<strong>" + match.Value + "</strong>";
    }, RegexOptions.IgnoreCase);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多