我想要做的是某種「禁止的詞」突出顯示。查找並替換幾個詞而不影響將來的替換
這裏是價值觀,我有:
我有一個數組bannedwords列表
{ "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);
}
與此問題,而且它也取決於陣列中字的順序,是如果被禁止的話人會影響你的更換(<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>
,但沒有成功。
您的替代品對HTML沒有任何意義,它只是替換您告訴它的內容。它無法區分標籤內的文本和文本。您需要更明確地使用替換正則表達式,或者使用可以解析HTML的HTML Agility Pack之類的東西。 – Lloyd 2013-02-18 14:56:09
看看這裏:http://stackoverflow.com/questions/653700/highlight-a-list-of-words-using-a-regular-expression-in-c-sharp – Najzero 2013-02-18 14:56:18
你總是可以使用正則表達式的元素解析HTML並避免以這種方式破壞標籤。 – Stonehead 2013-02-18 14:58:31