正则表达式匹配不出来。

Anew_G 2012-03-17 12:57:03


我想匹配出 <div id="nbaVidRsltBody" style="visibility: visible; "> 和 <div id="nbaVidPagBtm"> 之间的内容

为什么使用以下两种都匹配不出来?错在哪里?

Regex r = new Regex(@"(?is)(?<=id=""nbaVidRsltBody"")(?:(?!id=""nbaVidPagBtm"").)*(?=id=""nbaVidPagBtm"")");


Regex r = new Regex(@"(?is)(?<=id=""nbaVidRsltBody""[^>]+>).+?(?=id=""nbaVidPagBtm"")");
...全文
195 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anew_G 2012-03-17
  • 打赏
  • 举报
回复
嗯 多谢楼上各位 结贴
EnForGrass 2012-03-17
  • 打赏
  • 举报
回复
建立一个txt文档,内容如下:

<div id="nbaVidRsltBody" style="visibility: visible; "> fdahslflkaslkashllfhads347r84<div id="nbaVidPagBtm">
<div id="nbaVidRsltBody" style="visibility: visible; ">1231<div id="nbaVidPagBtm">
<div id="nbaVidRsltBody" style="visibility: visible; ">dfs4<div id="nbaVidPagBtm">
<div id="nbaVidRsltBody" style="visibility: visible; "> f333ds<div id="nbaVidPagBtm">
<div id="nbaVidRsltBody" style="visibility: visible; "> fdse34434343<div id="nbaVidPagBtm">


StreamReader sd = new StreamReader(@"C:\1.txt",,System.Text.Encoding.GetEncoding("GB2312"));
string strst = sd.ReadToEnd();
MatchCollection mc = Regex.Matches(strst, @"(?is)<div\s* id=""nbaVidRsltBody""\s* style=""visibility: visible; ""\s*>(?<html>(.*?))<div\s* id=""nbaVidPagBtm""\s*>");
List<string> list = new List<string>();
foreach (Match m in mc)
{
list.Add(m.Groups["html"].Value);//你需要的结果在list
}

EnForGrass 2012-03-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 anew_g 的回复:]

引用 8 楼 lxcnn 的回复:

楼主怎么知道你给的两个正则没效果,用什么测试的,要么是你的测试数据有问题,要么是你的测试工具或代码有问题,你给的正则是可以取到结果的

C# code
string test = @"图挂掉了,具体情况看下面

<div id=""nbaVidRsltBody"" style....>

....(这里还有很多内容)

<div id=……
[/Quote]
你看看你的获取的html代码有没有问题,是不是你包含<div id="nbaVidRsltBody" style="visibility: visible; "> 和 <div id="nbaVidPagBtm">这种,你的正则是可以获取到的。仔细检查一下吧
youzelin 2012-03-17
  • 打赏
  • 举报
回复
我觉得“(?is)(?<=id=""nbaVidRsltBody"")” 这里,你应该写全。style 也要写进去
Anew_G 2012-03-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lxcnn 的回复:]

楼主怎么知道你给的两个正则没效果,用什么测试的,要么是你的测试数据有问题,要么是你的测试工具或代码有问题,你给的正则是可以取到结果的

C# code
string test = @"图挂掉了,具体情况看下面

<div id=""nbaVidRsltBody"" style....>

....(这里还有很多内容)

<div id=""nbaVidPagBtm""> ";
Regex……
[/Quote]



我在浏览器中查看源代码是这样的

<div id="nbaVidRsltBody" style="visibility: visible; ">

这里是有实际的内容

<div id="nbaVidPagBtm">

而用httpwebrequest获取的源代码里是这样的

<div id="nbaVidRsltBody" style="visibility: visible; ">

<!--playlist here-->

<div id="nbaVidPagBtm">

我给的那两个匹配出来是空的。。 2L和5L的同志可以匹配出playlist here,刚才没细看 以为匹配错了
他们两个的是能匹配的

现在问题就是我浏览器里看到的实际内容估计是不是AJAX之类再次获取的?
用httpwebrequest只能得到这么一个注释。。
-过客- 2012-03-17
  • 打赏
  • 举报
回复
楼主怎么知道你给的两个正则没效果,用什么测试的,要么是你的测试数据有问题,要么是你的测试工具或代码有问题,你给的正则是可以取到结果的

string test = @"图挂掉了,具体情况看下面

<div id=""nbaVidRsltBody"" style....>

....(这里还有很多内容)

<div id=""nbaVidPagBtm""> ";
Regex r = new Regex(@"(?is)(?<=id=""nbaVidRsltBody""[^>]+>).*?(?=id=""nbaVidPagBtm"")");
MatchCollection mc = r.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
/*-----输出-----


....(这里还有很多内容)

<div
*/
gzdiablo 2012-03-17
  • 打赏
  • 举报
回复
用match.Groups[1].Value取值

记住 正则表达式不单只有match.Value才能获取值。更多的情况是通过match.Groups[x].Value来取值的
hwyqy 2012-03-17
  • 打赏
  • 举报
回复
同楼上的
"(?is)(?<=<div id=""nbaVidRsltBody""[^>]*>).+?(?=<div id=""nbaVidPagBtm"">)"
dalmeeme 2012-03-17
  • 打赏
  • 举报
回复
@"(?is)(?<=<div id=""nbaVidRsltBody""[^>]*>).+?(?=<div id=""nbaVidPagBtm"">)"
pmars 2012-03-17
  • 打赏
  • 举报
回复
new Regex(@"(?is)(?<=id=""nbaVidRsltBody"")(?:(?!id=""nbaVidPagBtm"").)*

给后面的去掉呢!
Anew_G 2012-03-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gzdiablo 的回复:]

C# code
Regex re = new Regex(@"<div\b[^>]*?id=""nbaVidRsltBody""[^>]*>([\s\S]*?)<div\b[^>]*?id=""nbaVidPagBtm""[^>]*>", RegexOptions.IgnoreCase);
Match match = re.Match(str);……
[/Quote]

匹配不出之间的内容,只匹配出头跟尾
gzdiablo 2012-03-17
  • 打赏
  • 举报
回复
			Regex re = new Regex(@"<div\b[^>]*?id=""nbaVidRsltBody""[^>]*>([\s\S]*?)<div\b[^>]*?id=""nbaVidPagBtm""[^>]*>", RegexOptions.IgnoreCase);
Match match = re.Match(str);
if(match.Success)
{
Console.WriteLine(match.Groups[1].Value);
}
Anew_G 2012-03-17
  • 打赏
  • 举报
回复
图挂掉了,具体情况看下面

<div id="nbaVidRsltBody" style....

....(这里还有很多内容)

<div id="nbaVidPagBtm">

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧