C# 正则表达式提取html中的文本

是这样的,我想提取在一个网页的所有的html代码中提取特定的html代码中的文本。比如说下面的这个:<h1id="artibodyTitle"pid="1"tid="1"... 是这样的,我想提取在一个网页的所有的html代码中提取特定的html代码中的文本。比如说下面的这个:
<h1 id="artibodyTitle" pid="1" tid="1" did="25820705" fid="1666">value</h1>

想提取到这两个标记中的value部分的具体字符串,然后赋值给string型的s1变量。
然后提取下面的这个:
<div class="blkContainerSblkCon BSHARE_POP" id="artibody">
<!-- 视频小点大播放器_正文上方显示 -->

<!-- publish_helper name='原始正文' p_id='1' t_id='1' d_id='25820705' f_id='3' -->
<p>text1</p>
<p>text2</p>
<p>text3</p>
<p>text4</p>

<p>text5</p>

<p align="right">text6</p>

<!-- publish_helper_end -->
</div>
把上面<div class="blkContainerSblkCon BSHARE_POP" id="artibody">和</div>
中间的部分取出来给string型的s2变量。
然后把<div class="blkContainerSblkCon BSHARE_POP" id="artibody">和</div>中间的,去掉<p></p>的部分,这样只有文本的部分给string型的s3变量。
分别写出三个的正则表达式和实现的具体的c#代码。
谢谢各位大神了。
先给这么多分数,答得好了再追加。谢谢了。
展开
 我来答
维湾教育培训
2015-12-12 · 知道合伙人软件行家
维湾教育培训
知道合伙人软件行家
采纳数:3549 获赞数:13649

向TA提问 私信TA
展开全部
static void Main(string[] args)
{
String s = @"<Body>
<div>这里是要取出的文本A <img src=""/>这里是要取出的文本B <a href="">超链接里的文本不取出 </a>这里是要取出的文本C </div>
<body>";
Regex regex = new Regex( "(/?\\w+)[^>]*>([^<]*)<", RegexOptions.IgnoreCase );

MatchCollection ms = regex.Matches( s );

foreach( Match m in ms )
{
string tagName = m.Groups[1].Value.ToLower();
string text = m.Groups[2].Value.Trim();
if( tagName != "a" && text.Length > 0 )
Console.WriteLine( text );
}
}
结果:
这里是要取出的文本A
这里是要取出的文本B
这里是要取出的文本C
哲事姓无
2012-12-15 · TA获得超过1176个赞
知道小有建树答主
回答量:903
采纳率:100%
帮助的人:443万
展开全部

去找一个叫HtmlAgilityPack的组件,然后使用xpath查找节点,比使用正则容易得多了。


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神秘的的大自然
2012-12-22
知道答主
回答量:3
采纳率:0%
帮助的人:8.2万
展开全部
第一个问题,(?<=<h1>).*?(?=</h1>)

第二个问题,[^^]*?
第三个问题,(?<=<p>).*?(?=<p>)
其他的你参照一下吧。一楼已经说的基本差不多了。把正则换一下就行了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百百mp3
2012-12-15 · TA获得超过855个赞
知道小有建树答主
回答量:901
采纳率:90%
帮助的人:551万
展开全部
string s1 = new Regex("(?<=<h1 id=\"artibodyTitle\" pid=\"1\" tid=\"1\" did=\"25820705\" fid=\"1666\">).*?(?=</h1>)").Match("<h1 id=\"artibodyTitle\" pid=\"1\" tid=\"1\" did=\"25820705\" fid=\"1666\">value</h1>").Value);
更多追问追答
追问
其他两个呢。方法是一样么,其他的两个的正则怎么写呢?~
追答
string code = "\r\n\r\n\r\ntext1
\r\ntext2
\r\ntext3
\r\ntext4
\r\ntext5
\r\ntext6
\r\n\r\n";
string rc = new Regex("((:?.|\r|\n)*)").Match(code).Value;

string s2 = rc.Substring("\r\n".Length,rc.Length - "".Length - "\r\n".Length);
string s3 = new Regex("(?<=).*?(?=
)").Replace(s2,string.Empty)
########测试通过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-12-18
展开全部
o
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式