[英]replace multiple words by the same word in bold
我在RichTextBox中有一個文本,並且有一個單詞列表(wordList)-我在使用winforms。
我需要做的是wordList中的所有單詞都以粗體顯示在文本中。
范例:
文字:“我有文字,我需要將一些文字加粗”
列表中的單詞: "need"; "some"; "bold"
"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}
任何想法為什么?
我是否正確,這是在回發/ 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。
PS。 這是不區分大小寫的。
希望能有所幫助。
似乎您將網絡與富文本框混淆了。 該示例代碼僅在空格上分割,並且對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();
}
謝謝大家,但我找到了答案。
我使用的是RichTextBox,但是當我在其中顯示結果時,卻忘記了使用.Rtf而不是.Text ....(愚蠢的我!),一切正常!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.