用粗体中的同一单词替换多个单词

本文关键字:单词 替换 | 更新日期: 2023-09-27 18:32:42

我在RichTextBox中有一个文本,还有一个单词列表(wordList( - 我正在使用winforms。
我需要做的是单词列表中的所有单词都以粗体显示在文本中。
例:
文本:"我有一条文本,我需要用粗体输入一些单词">

列表中的单词 : "need"; "some"; "bold"

结果:"我有一段文字,我需要粗体输入一些单词">
我试过这个(我在堆栈溢出中看到了一个类似的帖子(

text= "" + text+ "";
foreach (var word in wordList)
{
    string w = string.Format(" {0} ", word);
    if (text.Contains(w))
    {
        while (text.Contains(w))
        {
            text= text.Replace(w, "<b>"+w+"</b>");
        }
    }
}
text = text.Trim();

我怎么能说 w 这个词需要加粗呢?

编辑:
我试过这个解决方案

  public string MakeBold(string text, string[] splitwords)
  {
      var sb = new StringBuilder();
      var words = text.Split(' ');
      sb.Append(@"{'rtf1'ansi ");
      foreach (var word in words)
      {
          if (splitwords.Contains(word))
          {
              sb.Append(@"'b" + word + @"'b0");
          }
          else
          {
              sb.Append(word);
              sb.Append(@" ");
          }
      }
      sb.Append(@"}");
      return sb.ToString();
  }

结果在富文本框中

{'rtf1'ansiI have a text and I 'bneed'b0to put 'bsome'b0words in 'bbold'b0}    

任何想法为什么??

用粗体中的同一单词替换多个单词

我说的对吗?

在此之后,您是否需要将字符串恢复为原始形式? 因为您需要删除所有粗体标签。

但是,出于显示目的,您可以将字符串拆分为空格,这将为您提供一个数组。然后只需将所有匹配的数组项替换为 + 数组项 +

(你最好把它们放在一个跨度中,实际上有一个类。这将为您提供更大的灵活性 - 可以更改颜色,字体大小,粗体等。

另外,如果单词出现在另一个单词中,您是否想加粗该单词?例如,如果你正在寻找"卖",而inputString是"卖我的房子",你最终会得到:"卖掉我的房子"。

为简单起见:

var inputString = "your input string!"
var outputString = "";
var wordsToFindArray = [string array of the words you are looking to make bold.]
foreach (wordToFind in wordsToFind)
{
    //pick one of these lines, not both, as the second will overwrite the first
    outputstring = inputstring.replace(wordToFind, "<span class='"found-word'">" + wordToFind + "</span>"); //add span class
    outputstring = inputstring.replace(wordToFind, "<b>" + wordToFind + "</b>"); //boldify
}
return outputString;

但是,这也会将 span 类加粗/添加到单词中找到的单词中。

或者,如上所述,您可以对输入字符串、" " 或 "." 等进行拆分,然后对每个输入字符串数组项运行 foreach。

附言这是不区分大小写的。

希望有帮助。

您似乎将网络与富文本框混淆了。示例代码仅在空格上拆分,并且不对大写字母执行任何操作。

public string MakeBold(string text, string[] splitwords)
{
    var sb = new StringBuilder();
    var words = text.Split(" ");   
    sb.Append(@"{'rtf1'ansi");
    foreach (var word in words){
      if (splitwords.Contains(word)){
         sb.Append(@"'b"+word+ @"'b0 ");
      }
      else
      {
         sb.Append(word);
         sb.Append(@" ");
      }
    }
    sb.Append(@"}");
    return sb.ToString();
}

谢谢大家,但我找到了答案。
我正在使用RichTextBox,但是当我在那里显示结果时,我忘记使用。用 RTF 代替 。发短信。。。。 (愚蠢的我!一切正常!