【问题标题】:Append words surrounding phrase with bold tag用粗体标签在短语周围附加单词
【发布时间】:2019-04-22 07:43:15
【问题描述】:

我试图模仿 Google 显示相关搜索结果的方式。

假设我搜索了“小部件”。

在 Google 提供的相关字词中,除了搜索字词之外的所有字词都加粗。

他们这样做的方式是在其他位上附加一个<b> 标签。

以下是基于搜索词widgets的一些示例:

术语:蓝色小部件

<b>blue</b> widgets

结果:蓝色小部件

术语:汽车小部件

widgets <b>for cars</b>

结果:用于汽车的小部件

术语:适合热爱小部件的真男人的大小部件

<b>big</b widgets <b>for real men with a love for</b> widgets

结果:小部件适合真正喜欢小部件的男人

我在 Asp.Net c# 中工作,没有理由不应该在代码中完成此操作,不是 javascript - 问题是我想不出一种方法它!

有人做过类似的事情,可以提供一些建议吗?

提前致谢。

【问题讨论】:

  • 找到单词并将其包含在捕获组中,然后只需将组的值替换为&lt;b&gt; 标记。 See this for reference
  • 抱歉,Kunal,您的回答中有一些我不明白的地方,例如“查找单词” - 究竟如何,以及“捕获组”。
  • 在正则表达式Regex regex = new Regex(@"blue");中找到字面使用的单词并将其括在capturing group
  • 这并不像你想象的那么简单。首先,我要查找除“blue”之外的所有单词,然后我需要封装部分,而不是单个单词。
  • @TaW - 已注明并已修复。

标签: c# asp.net webforms


【解决方案1】:

您可以使用negative lookahead 来否定该词,并在所有否定后跟Regex.Replace 将其替换为封闭的&lt;b&gt; 标记。

public static class Program
{
        private static void Main(string[] args)
        {

            string input = @"
            blue widgets

            widgets for cars

            big widgets for real men";

            string pattern = @"(?!widgets\b)\b\w+";

            string res = Regex.Replace(input, pattern, (match) =>
            {
                return $"<b>{match}</b>";
            });

            Console.WriteLine(res);
        }
    }
}

输出:

<b>blue</b> widgets

widgets <b>for</b> <b>cars</b>

<b>big</b> widgets <b>for</b> <b>real</b> <b>men</b>

【讨论】:

  • 感谢 Kunal 的详尽示例,我非常感谢。正如我在上一条评论中指出的那样,正则表达式会选择每个单词——我是否可以进行任何调整以使相邻关键字的字符串在同一个 内——例如,for real men
  • Kunal,再次感谢您的意见。我已经测试了上面的代码,但它在两个方面都失败了。第一个我已经在上面介绍过,但更重要的是,它不适用于多词短语 - 仅适用于单个词。
猜你喜欢
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2017-08-19
  • 1970-01-01
相关资源
最近更新 更多