私がやりたいのは、ある種の「禁止された言葉」の強調表示です。
これが私が持っている値です:
配列内の禁止された単語のリストがあります
{ "word1", "word2", "word3", "word4" }
コメントを表す文字列があります
"i want to word1ban this word3 stupidword4 comment"
これらをhtmlの太字のタグ()で強調したいと思います<b> </b>
。したがって、たとえば、このコメント文字列は次のようになります。
"i want to <b>word1</b>ban this <b>word3</b> stupid<b>word4</b> comment"
私が実際にこれを行う方法は、正規表現の置換を使用することであり、私にとって厄介なことを除いて、それはかなりうまく機能します。
foreach (var word in words)
{
value = Regex.Replace(value, string.Format(@"{0}", Regex.Escape(HttpUtility.HtmlEncode(word))), "<b>" + word + "</b>", RegexOptions.IgnoreCase);
}
これに関する問題は、配列内の単語の順序にも依存しますが、禁止されている単語の1つが置換に影響を与えるかどうかです(<b>
または</b>
)
たとえば、これを禁止されている単語に追加すると、次のようになります。<b
コードに続いて、最初の反復結果は次のようになります。
"i want to <b>word1</b>ban this <b>word3</b> stupid<b>word4</b> comment"
その後、次のように置き換え<b
ます。
"i want to <b><b</b>>word1</b>ban this <b><b</b>>word3</b> stupid<b><b</b>>word4</b> comment"
交換に影響を与えたくありません。どうすればこれができるのだろうか。正規表現に例外を追加して除外しよう<b>
と</b>
しましたが、置き換えに成功しませんでした。