想用正则表达式把html字符串的文本提取出来,然后就想到把html的标签替换为“”就行了,但是<pre></pre>标签和此标签里的标签不想被替换
比如说
<div>
<p>这是代码</p>
<pre>
<a>link</a>
</pre>
</div>
然后得出的是:
这是代码
<pre>
<a>link</a>
</pre>
该怎么写正则表达式
使用正则@"([\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"));
}
}
}
这个效果跟@长蘑菇星人的差不多,不是我要的结果,我想要的是<pre></pre>标签非匹配,其他标签匹配
@海之殇: 运行结果是:
<div>
<p>这是代码</p>
</div>
@dudu:
我想要的结果是
这是代码
<pre>
<a>link</a>
</pre>
@海之殇: 那通过maches就能得到:
var regex = new Regex(@"<pre>[\w\W]+?</pre>");
var matches = regex.Matches(html);
if(matches != null)
{
Console.WriteLine(matches[0]);
}
@dudu: 可能还是没说清楚需求
需求有两点
1.保留<pre></pre>以及里面的内容
<pre> <a>link</a> </pre>
2.去掉其他标签,但是保留里面的内容,也就是<p></p>标签里保留
这是代码
@海之殇: 这下复杂了好多
@dudu: 嗯嗯,确实有点复杂了,可能要换个思路了
<pre>[\s\S]*?</pre>
你这个只是匹配<pre></pre>标签的内容,我的要求是匹配其他标签,但是不匹配<pre></pre>标签及其里面的标签,然后用“”替换掉匹配的标签
@海之殇: Oh,抱歉,没看清。
对于正则来说。“不匹配” 是有点太困难了。
不如自己逐字处理。比起正则来应该更快一些。