基于此replace multiple words by the same word in bold,我意识到此代码存在问题/限制..
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();
}
使用此行var words = text.Split(" ");
我将文本中的所有单词分开,但如果要替换的字符串是:
文字:“我有一个文字,我需要用粗体字加上一些文字”
单词:“有文字”; “黑体”
结果:“我有一个文字,我需要在粗体”中添加一些单词
编辑::
我像这样更新了我的代码
private string Bold(string text, string[] splitwords)
{
StringBuilder builder = new StringBuilder();
builder.Append(@"{\rtf1\ansi");
foreach (string word in splitwords)
{
if (Regex.IsMatch(text, @"(?<![\w])" + word + @"(?![\w])" ))
{
text= text.Replace(word, @"\b " + word + " " + @"\b0");
}
}
builder.Append(text);
builder.Append(@"}");
return builder.ToString();
}
但如果我有文字
文字:“我有一个文字,我需要用粗体字加上一些文字”
单词:“have”; “有文字”; “黑体”
结果:“我 一个文字,我需要在粗体中添加一些单词”
但在另一种情况下它运作正常 HELP ....
答案 0 :(得分:1)
试试这个:
public string MakeBold(string text, string[] splitwords)
{
string returnValue = text;
foreach (var word in splitwords)
{
returnValue = returnValue.Replace(word, @"\b" + word + @"\b0");
}
var finalString = new StringBuilder();
finalString.Append(@"{\rtf1\ansi");
finalString.Append(returnValue);
finalString.Append(@"}");
return finalString.ToString();
}
答案 1 :(得分:0)
我们可以检查每个短语的所有出现次数:
StringBuilder builder = new StringBuilder();
string[] words = text.Split(" ");
foreach (string phrase in splitwords)
{
string[] phrasewords = phrase.Split(" ");
for (int i = 0; i < words.Length - phrasewords.Length; i++)
{
bool match = true;
for (int j = 0; j < phrasewords.Length; j++)
if (words[i] != phrasewords[j])
{
match = false;
break;
}
if (match)
{
builder.Append(@"\b" + phrase + @"\b0 ");
i += phrasewords.Length - 1;
}
else
builder.Append(words[i] + " ");
}
}
这不适用于重叠短语,例如“一二”和“二三”。