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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一条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();

参考技术A 只能分步走
一是得到Div中的内容
二是删除带有<P>标签的内容追问

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

参考技术B 如果是通用的话用正则是没法解析的,你可以用htmlagilitypack这个开源组件把HTML转化成XML,这样就很好解析了。这个组件的项目在codeplex,网址就不发了,会被百度吃掉。google找下就有了

求一段PHP的正则 我要匹配文本内所有的</h1>后的内容

<div class="aaa">
<h1>abc</h1>ccc</div>
我去要取得ccc处的内容

参考技术A

</h1>.*?<

</h1>.*?<

以上是关于求一条c# 正则表达式,来获取HTML标签的内容的主要内容,如果未能解决你的问题,请参考以下文章

求一条oracle的正则表达式

使用正则表达式获取标签中的第一个单词

正则表达式查找html标签c#之外的任何文本[关闭]

正则表达式、xpath、BeautifulSoup和JSONPath的区别?

php获取html标签image的src内容 正则表达式

使用 C# 解析 HTML 以获取内容