首页 新闻 会员 周边 捐助

用正则表达式替换html字符串标签问题

0
悬赏园豆:50 [已解决问题] 解决于 2016-08-29 18:31

想用正则表达式把html字符串的文本提取出来,然后就想到把html的标签替换为“”就行了,但是<pre></pre>标签和此标签里的标签不想被替换

比如说

<div>

<p>这是代码</p>

<pre>

<a>link</a>

</pre>

</div>

然后得出的是:

这是代码

<pre>

<a>link</a>

</pre>

该怎么写正则表达式

海之殇的主页 海之殇 | 菜鸟二级 | 园豆:500
提问于:2016-08-29 13:34
< >
分享
最佳答案
0

使用正则@"([\w\W]+?)<pre>[\w\W]+?</pre>([\w\W]+?)",测试代码如下:

namespace Cnblogs.Q85596
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var html = @"
<div>
<p>这是代码</p>
<pre>
<a>link</a>
</pre>
</div>";
            var regex = new Regex(@"([\w\W]+?)<pre>[\w\W]+?</pre>([\w\W]+?)");
            Console.WriteLine(regex.Replace(html, "$1$2"));
        }
    }
}
收获园豆:25
dudu | 高人七级 |园豆:30939 | 2016-08-29 15:28

这个效果跟@长蘑菇星人的差不多,不是我要的结果,我想要的是<pre></pre>标签非匹配,其他标签匹配

海之殇 | 园豆:500 (菜鸟二级) | 2016-08-29 15:51

@海之殇: 运行结果是:

<div>
<p>这是代码</p>
</div>
dudu | 园豆:30939 (高人七级) | 2016-08-29 16:18

@dudu: 

我想要的结果是

这是代码

<pre>

<a>link</a>

</pre>

海之殇 | 园豆:500 (菜鸟二级) | 2016-08-29 16:21

@海之殇: 那通过maches就能得到:

var regex = new Regex(@"<pre>[\w\W]+?</pre>");
var matches = regex.Matches(html);                        
if(matches != null)
{
    Console.WriteLine(matches[0]);
}
dudu | 园豆:30939 (高人七级) | 2016-08-29 16:31

@dudu: 可能还是没说清楚需求

需求有两点

1.保留<pre></pre>以及里面的内容

<pre>
<a>link</a>
</pre>

2.去掉其他标签,但是保留里面的内容,也就是<p></p>标签里保留

这是代码
海之殇 | 园豆:500 (菜鸟二级) | 2016-08-29 17:02

@海之殇: 这下复杂了好多

dudu | 园豆:30939 (高人七级) | 2016-08-29 17:19

@dudu: 嗯嗯,确实有点复杂了,可能要换个思路了

海之殇 | 园豆:500 (菜鸟二级) | 2016-08-29 17:38
其他回答(1)
0

<pre>[\s\S]*?</pre>

收获园豆:25
长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-08-29 13:52

你这个只是匹配<pre></pre>标签的内容,我的要求是匹配其他标签,但是不匹配<pre></pre>标签及其里面的标签,然后用“”替换掉匹配的标签 

支持(0) 反对(0) 海之殇 | 园豆:500 (菜鸟二级) | 2016-08-29 14:04

@海之殇: Oh,抱歉,没看清。

对于正则来说。“不匹配” 是有点太困难了。

不如自己逐字处理。比起正则来应该更快一些。

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-08-29 14:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册