求一条c# 正则表达式,来获取HTML标签的内容

比如:<div>我要的内容,<p>里面有其他标签和中文的</p>,我要的内容</div>
要获取div里面的内容,正则表达式该如何写呢?求教

按格式来.. 匹配位于 <div> <p> 或者 </p> </div> 或者 </p> <p> 或者 <div> </div> 之间的不包含尖括号符号的内容.不过这样匹配的文本不在同一个match里, 但是是确实可行的.
(?<=<div>)[^><]*(?=</div>)|(?<=<div>)[^><]*(?=<p>)|(?<=</p>)[^><]*(?=</div>)|(?<=</p>)[^><]*(?=<p>)

如果完全与你的格式相同的话那就简单了.. - -就是只有一个<p>的情况..
Regex r=new Regex(@"<div>(?<1>[^><]*)<p>[\s\S]*?</p>(?<2>[^><]*)</div>")
r.Replace(文本,"$1$2")追问

(?[^>[^><]*)是什么意思呢,1和2要填哪些文本?

追答

1和2是组名- -
下面的r.Replace(文本,"$1$2") 这个是使用捕捉到的组来替换...
你也可以换个组名... 比如
Regex r=new Regex(@"(?[^>[^>")
r.Replace(文本,"${我是组名1}${我是组名2}")

非纯数字的组名要用{}括起来- -

r.Replace会返回一个替换后的字符串,你看着处理,
我这里是把两个内容给连在一起了,,

追问

(?[^>[^><]*) , 这2个表达式把1和2都替换掉之后,这2个表达式的作用是什么呢?

追答

如果不分组的话这个正则表达式是这样: [^>
分组就是 (?正则)的格式
这2个表达式的作用就是把整个正则来分组.
(?[^>[^>
这个正则, 组1是和 之间的, 不包含尖括号的内容
组2是
和之间的, 不包含尖括号的内容,
分组之后可以在代码里利用组名来获得匹配到的内容

你也可以 Match m=r.Match(你的文本) , 来匹配 ,然后
while(m.Success) {
//m.Groups[1]
//m.Groups[2]
// 用这俩来获得这次匹配得到的1,2两个组的内容, 也就是你要的内容了
m=m.NextMatch();}

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-22
只能分步走
一是得到Div中的内容
二是删除带有<P>标签的内容追问

得到Div中的内容的正则表达式怎样写呢?

第2个回答  2012-01-22
如果是通用的话用正则是没法解析的,你可以用htmlagilitypack这个开源组件把HTML转化成XML,这样就很好解析了。这个组件的项目在codeplex,网址就不发了,会被百度吃掉。google找下就有了
相似回答