截取字符串问题

Bodil 2008-12-02 09:14:04
假设有段代码,如下
<div class="basic" style="float:left;"  id="list1a">
<a>There is one obvious advantage:</a>
<div>
<p>
You've seen it coming!<br/>
Buy now and get nothing for free!<br/>
Well, at least no free beer. Perhaps a bear,<br/>
if you can afford it.
</p>
</div>
<a>Now that you've got...</a>
<div>
<p>
your bear, you have to admit it!<br/>
No, we aren't selling bears.
</p>
</div>
<a>Rent one bear, ...</a>
<div>
<p>
get two for three beer.
</p>
<p>
<a>And now, for something completely different.</a>
<a>And now, for something completely different.</a>
<a>And now, for something completely different.</a>
<a>And now, for something completely different.</a>
<a>And now, for something completely different.</a>
And now, for something completely different.<br/>
And now, for something completely different.<br/>
And now, for something completely different.<br/>
Period.
</p>
</div>
</div>

我要截取id为list1a的DIV标签下的字符串,条件是每个<a></a>截取一次,每个<div></div>截取一次,我要存进数据库的,a标签取出来的放入一个字段,div取出来的放入一个字段,a标签所在字段和div标签所在字段是同一行的
如何取?
还有,如果div标签中有a标签怎么办,我要div里的全部内容
...全文
87 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
root_ 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xxc3303 的回复:]
万分感谢,高手好厉害啊,分都给你了,想问下阁下正则用了多久了,这么快就弄出来了。。。
[/Quote]

呵呵,正则入门很容易,但要做到信手拈来,那就要多做练习了,我玩正则已经有一年了
Bodil 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 root_ 的回复:]
引用 4 楼 xxc3303 的回复:
多谢了,实现了,但是能不能再帮我改下,我只要 <a> </a>里面的内容,不要把它们带上, <div…


那就换一下捕获的位置就行了

C# code
Match mStr = Regex.Match(str, @"<div[^>]*?id=""list1a""[^>]*>(((?<o>)<div[^>]*>|(?<-o>)</div>|(?:(?!</?div)[\s\S]))*)(?(o)(?!))</div>", RegexOptions.IgnoreCase);
if (mStr.Success)
{
MatchCollection mc = Regex.Matches(mStr.Value, @…
[/Quote]
万分感谢,高手好厉害啊,分都给你了,想问下阁下正则用了多久了,这么快就弄出来了。。。
net_xiaojian 2008-12-02
  • 打赏
  • 举报
回复
来学习。
root_ 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xxc3303 的回复:]
多谢了,实现了,但是能不能再帮我改下,我只要 <a> </a>里面的内容,不要把它们带上, <div…
[/Quote]

那就换一下捕获的位置就行了

Match mStr = Regex.Match(str, @"<div[^>]*?id=""list1a""[^>]*>(((?<o>)<div[^>]*>|(?<-o>)</div>|(?:(?!</?div)[\s\S]))*)(?(o)(?!))</div>", RegexOptions.IgnoreCase);
if (mStr.Success)
{
MatchCollection mc = Regex.Matches(mStr.Value, @"<a[^>]*>([\s\S]*?)</a>\s*<div[^>]*>([\s\S]*?)</div>", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox1.Text += m.Groups[1].Value + "\n";
richTextBox1.Text += m.Groups[2].Value + "\n";
richTextBox1.Text += "---------------------------\n";
}
}
Bodil 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 xxc3303 的帖子:]
假设有段代码,如下

HTML code<div class="basic" style="float:left;" id="list1a">
<a>There is one obvious advantage:</a>
<div>
<p>
You've seen it coming!<br/>
Buy now and get nothing for free!<br/>
Well, at least no free beer. Perhaps a bear,<br/>
if you can afford it…
[/Quote]
多谢了,实现了,但是能不能再帮我改下,我只要<a></a>里面的内容,不要把它们带上,<div></div>里的也一样
jiang_jiajia10 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 root_ 的回复:]
如果id为list1a的DIV标签事先并没有取得,那么可以先获取id为list1a的DIV标签,然后再应用上面的方法取得a标签和div标签


C# codeMatch mStr = Regex.Match(str, @"<div[^>]*?id=""list1a""[^>]*>(((?<o>)<div[^>]*>|(?<-o>)</div>|(?:(?!</?div)[\s\S]))*)(?(o)(?!))</div>", RegexOptions.IgnoreCase);
if (mStr.Success)
{
MatchCollection mc = Regex.Matches(mStr.Value, @"(<a[^>]*>[\s\S]*?</a>)\s*(<div[^>]…
[/Quote]
正则王道
root_ 2008-12-02
  • 打赏
  • 举报
回复
如果id为list1a的DIV标签事先并没有取得,那么可以先获取id为list1a的DIV标签,然后再应用上面的方法取得a标签和div标签

Match mStr = Regex.Match(str, @"<div[^>]*?id=""list1a""[^>]*>(((?<o>)<div[^>]*>|(?<-o>)</div>|(?:(?!</?div)[\s\S]))*)(?(o)(?!))</div>", RegexOptions.IgnoreCase);
if (mStr.Success)
{
MatchCollection mc = Regex.Matches(mStr.Value, @"(<a[^>]*>[\s\S]*?</a>)\s*(<div[^>]*>[\s\S]*?</div>)", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox1.Text += m.Groups[1].Value + "\n";
richTextBox1.Text += m.Groups[2].Value + "\n";
richTextBox1.Text += "---------------------------\n";
}
}
root_ 2008-12-02
  • 打赏
  • 举报
回复
你要取的<a> </a>和<div> </div>是交替出现的吗?如果符合这个规律,那么div标签中有a标签是没有关系的

MatchCollection mc = Regex.Matches(str, @"(<a[^>]*>[\s\S]*?</a>)\s*(<div[^>]*>[\s\S]*?</div>)", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox1.Text += m.Groups[1].Value + "\n";
richTextBox1.Text += m.Groups[2].Value + "\n";
richTextBox1.Text += "---------------------------\n";
}

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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