内部の HTML タグをすべて削除すると (a、img タグなど) 読みにくくなる可能性があるため、一部を削除し、一部を保持することをお勧めします。
正規表現では、特定の文字列かどうかを判断するのが非常に簡単です。理解できることですが、特定の文字列 (文字ではなく、何か、特定の文字列ではない) が含まれないかどうかを判断する方法は、確かに不可解です
<(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^>]+>
この規則は、HTML タグに含まれないかどうかを判断することです。 li / ul / a / img / br / span / b を含む、上記の要件に関する限り、ここにリストされている以外の HTML タグを削除する必要があります。 ?!exp) の後に続くのは exp の位置ではありません
/?s? 最初は先頭の < の後に書こうとしましたが、テストは失敗しました
以下は TAG を連結する単純な関数です。を保持して正規表現を生成し、不要な TAG を削除してください...
private static string RemoveSpecifyHtml(string ctx) { string[] holdTags = { "a", "img", "br", "strong", "b", "span" };//要保留的 tag // <(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^>]+> string regStr = string.Format(@"<(?!((/?\s?{0})))[^>]+>", string.Join(@")|(/?\s?", holdTags)); Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase); return reg.Replace(ctx, ""); }
上記の正規表現の場合、li が保持されている場合、実際の操作ではリンクも保持されていることがわかり、意志が保持されます。解決策は、b アサーションを追加することです。
<(?!((/?\s?li\b)|(/?\s?ul)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+> private static string RemoveSpecifyHtml(string ctx) { string[] holdTags = { "a", "img", "br", "strong", "b", "span", "li" };//保留的 tag // <(?!((/?\s?li\b)|(/?\s?ul\b)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+> string regStr = string.Format(@"<(?!((/?\s?{0})))[^>]+>", string.Join(@"\b)|(/?\s?", holdTags)); Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase); return reg.Replace(ctx, ""); }