C#正则表达式替换HTML标签,除以外的所有都替换

welove1983 2011-05-23 10:39:39
一个文本中间很多的html标签,用正则表达式将此文本中的所有Html标签都替换为空格,但是<IMG></IMG>类似的不用替换.

冰天雪地跪求
...全文
2551 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
依米0_0 2013-09-11
  • 打赏
  • 举报
回复
引用 5 楼 MOTA 的回复:
给你这么个做法 首先将<img 替换成 $Guid[Img 然后对整个HTML进行删除HTML操作 接着将替换的字符还原回去
 /// <summary>
        /// 删除html代码 保留 IMG P BR三个标签
        /// </summary>
        /// <param name="str">所需要删除HTML代码的字符串</param>
        /// <returns></returns>
        public static string ReplaceHtml_IPB(this string str)
        {
            if (str != "" && str != null)
            {
                //删除内含的 样式表代码
                Regex CutStyle = new Regex(@"<style([^>])*>(\w|\W)*?</style([^>])*>", RegexOptions.IgnoreCase);
                String TempStr = CutStyle.Replace(str, "");

                //<([^>]+)> 不过滤 img标签
                TempStr = TempStr.Replace("</p>", "[/p]");
                TempStr = TempStr.Replace("</P>", "[/p]");
                TempStr = TempStr.Replace("<p>", "[p]");
                TempStr = TempStr.Replace("<P>", "[p]");


                Regex BrHtml = new Regex("<br(.*?)>", RegexOptions.IgnoreCase);
                TempStr = BrHtml.Replace(TempStr, "[br/]");
                Regex SpanHtml1 = new Regex("<span", RegexOptions.IgnoreCase);
                TempStr = SpanHtml1.Replace(TempStr, "[span");
                Regex SpanHtml2 = new Regex("</span>", RegexOptions.IgnoreCase);
                TempStr = SpanHtml2.Replace(TempStr, "[/span]");
                Regex ImgHtml = new Regex("<img", RegexOptions.IgnoreCase);
                TempStr = ImgHtml.Replace(TempStr, "[img");
                Regex CutHtml = new Regex("<([^>]+)>", RegexOptions.IgnoreCase);
                TempStr = CutHtml.Replace(TempStr, "");
                //TempStr = TempStr.Replace ("/>" , ">");
                //Regex ImgHtml=new Regex("<img",RegexOptions.IgnoreCase);
                //格式化现有代码
                //TempStr = HttpUtility.HtmlEncode(TempStr);


                TempStr = TempStr.Replace("[img", "<img");
                TempStr = TempStr.Replace("[span", "<span");
                TempStr = TempStr.Replace("[p]", "<p>");
                TempStr = TempStr.Replace("[/p]", "</p>");
                TempStr = TempStr.Replace("[br/]", "<br/>");
                TempStr = TempStr.Replace("[/span]", "</span>");
                return TempStr;

            }
            else
            {
                return "";
            }
        }
正解,刚好解决了我的难题
porschev 2011-05-23
  • 打赏
  • 举报
回复

思路可以是5楼的。。

把<img> <IMG> ,</img></IMG>替换成两个特定字符串。。

再去HTML标签 。

再把两个特定字符串替换回来。。

welove1983 2011-05-23
  • 打赏
  • 举报
回复
学习了
kingdom_0 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mota 的回复:]

给你这么个做法
首先将<img 替换成
$Guid[Img

然后对整个HTML进行删除HTML操作

接着将替换的字符还原回去
C# code
/// <summary>
/// 删除html代码 保留 IMG P BR三个标签
/// </summary>
/// <param name="str">所需要删除HTML代码……
[/Quote]
好办法,学习了!
MOTA 2011-05-23
  • 打赏
  • 举报
回复
本来应该还有一段话的
Regex CutScript = new Regex(@"(?i)<script([^>])*>(\w|\W)*</script([^>])*>", RegexOptions.IgnoreCase);
_temp = CutScript.Replace(_temp, "");

删除脚本·~
偷懒。木有写上
MOTA 2011-05-23
  • 打赏
  • 举报
回复
给你这么个做法
首先将<img 替换成
$Guid[Img

然后对整个HTML进行删除HTML操作

接着将替换的字符还原回去
 /// <summary>
/// 删除html代码 保留 IMG P BR三个标签
/// </summary>
/// <param name="str">所需要删除HTML代码的字符串</param>
/// <returns></returns>
public static string ReplaceHtml_IPB(this string str)
{
if (str != "" && str != null)
{
//删除内含的 样式表代码
Regex CutStyle = new Regex(@"<style([^>])*>(\w|\W)*?</style([^>])*>", RegexOptions.IgnoreCase);
String TempStr = CutStyle.Replace(str, "");

//<([^>]+)> 不过滤 img标签
TempStr = TempStr.Replace("</p>", "[/p]");
TempStr = TempStr.Replace("</P>", "[/p]");
TempStr = TempStr.Replace("<p>", "[p]");
TempStr = TempStr.Replace("<P>", "[p]");


Regex BrHtml = new Regex("<br(.*?)>", RegexOptions.IgnoreCase);
TempStr = BrHtml.Replace(TempStr, "[br/]");
Regex SpanHtml1 = new Regex("<span", RegexOptions.IgnoreCase);
TempStr = SpanHtml1.Replace(TempStr, "[span");
Regex SpanHtml2 = new Regex("</span>", RegexOptions.IgnoreCase);
TempStr = SpanHtml2.Replace(TempStr, "[/span]");
Regex ImgHtml = new Regex("<img", RegexOptions.IgnoreCase);
TempStr = ImgHtml.Replace(TempStr, "[img");
Regex CutHtml = new Regex("<([^>]+)>", RegexOptions.IgnoreCase);
TempStr = CutHtml.Replace(TempStr, "");
//TempStr = TempStr.Replace ("/>" , ">");
//Regex ImgHtml=new Regex("<img",RegexOptions.IgnoreCase);
//格式化现有代码
//TempStr = HttpUtility.HtmlEncode(TempStr);


TempStr = TempStr.Replace("[img", "<img");
TempStr = TempStr.Replace("[span", "<span");
TempStr = TempStr.Replace("[p]", "<p>");
TempStr = TempStr.Replace("[/p]", "</p>");
TempStr = TempStr.Replace("[br/]", "<br/>");
TempStr = TempStr.Replace("[/span]", "</span>");
return TempStr;

}
else
{
return "";
}
}
welove1983 2011-05-23
  • 打赏
  • 举报
回复
我就是要写这么一个的正则表达式.排除<img>的html标签都替换了.
lu6389639 2011-05-23
  • 打赏
  • 举报
回复
...这个是不是你要实现的功能,还是只是你要效果。。
welove1983 2011-05-23
  • 打赏
  • 举报
回复
这个是将html全部都替换了,但是我需要保留<img> 标签的内容怎么写?
蝶恋花雨 2011-05-23
  • 打赏
  • 举报
回复
/**//// <summary>
/// 将Html标签转化为空格
/// </summary>
/// <param name="strHtml">待转化的字符串</param>
/// <returns>经过转化的字符串</returns>
private string stripHtml(string strHtml)
{
Regex objRegExp = new Regex("<(.|\n)+?>");
string strOutput = objRegExp.Replace(strHtml, "");
strOutput = strOutput.Replace("<", "<");
strOutput = strOutput.Replace(">", ">");
return strOutput;
}
ok,这样一来Html标签就基本没了,但是有些例外会使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实是将Html标签转化为了空格。太多连续的空格会影响之后对字符串的操作。所以再加入这样的语句:

//把所有空格变为一个空格
Regex r = new Regex(@"\s+");
wordsOnly = r.Replace(strResponse, " ");
wordsOnly.Trim();
好了,大功告成,这里的wordsOnly便是我们最终的成果----去除了Html标签,并去除了多余空格的字符串。

http://hi.baidu.com/wwwzzg/blog/item/0c7c9e3cfcd54117baa167b8.html

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧