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

时间:2014-12-02 10:39:38

标签: c# string winforms replace

我在RichTextBox中有一个文本,还有一个单词列表(wordList) - 我正在使用winforms。
我需要做的是wordList中的所有单词都以粗体显示在文本中 示例:
文字:“我有一个文字,我需要用粗体字加上一些文字”

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

结果:“我有一个文字,我需要一些字词加入粗体” 我试过这个(我在stackoverflow中看到了类似的帖子)

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();
  }

,结果在RichTextBox

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

任何想法为什么?

3 个答案:

答案 0 :(得分:1)

我是否认为这是在回发/ ajax电话中发生的?

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

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

(你可能最好把它们放在一个范围内,实际上是一个类。这会给你更大的灵活性 - 可以改变颜色,字体大小,粗体等等。)

另外,如果它出现在另一个单词中,你想要加粗吗? 例如。如果你正在寻找“卖”,而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。

聚苯乙烯。这是不区分大小写的。

希望有所帮助。

答案 1 :(得分:0)

您似乎对Web文本框感到困惑。示例代码仅在空格上分割,并且不对Capitals执行任何操作。

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();
}

答案 2 :(得分:0)

感谢所有人,但我找到了答案 我正在使用RichTextBox,但当我显示结果时,我忘了使用.Rtf而不是.Text ....(愚蠢的我!) 一切都很好!