加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 使用嵌套的div查找id的div内容

发布时间:2020-12-14 06:26:13 所属栏目:百科 来源:网络整理
导读:在任何人问之前,我没有做任何类型的屏幕抓取. 我正在尝试解析html字符串以找到具有特定id的div.我不能为我的生活得到这个工作.以下表达式在一个实例中有效,但在另一个实例中无效.我不确定它是否与html中的额外元素有关. divs*?id=(""|quot;|#34;)content(
在任何人问之前,我没有做任何类型的屏幕抓取.

我正在尝试解析html字符串以找到具有特定id的div.我不能为我的生活得到这个工作.以下表达式在一个实例中有效,但在另一个实例中无效.我不确定它是否与html中的额外元素有关.

<divs*?id=(""|&quot;|&#34;)content(""|&quot;|&#34;).*?>s*?(?>(?! <divs*?> | </div> ) | <divs*?>(?<DEPTH>) | </div>(?<-DEPTH>) | .?)*(?(DEPTH)(?!))</div>

它正确地找到具有正确id的第一个div,但它然后在第一个结束div处关闭,而不是相关的div.

<div id="firstdiv">begining content<div id="content">some other stuff
    <div id="otherdiv">other stuff here</div>
    more stuff
    </div>
</div>

这应该带回来

<div id="content">some other stuff
   <div id="otherdiv">other stuff here</div>
   more stuff
</div>

,但由于某种原因,事实并非如此.它带回来:

<div id="content">some other stuff
      <div id="otherdiv">other stuff here</div>

有没有人有更容易的表达来处理这个?

为了澄清,这是在.NET中,我正在使用DEPTH关键字.你可以找到更多细节here.

在.NET中,您可以这样做:
(?<text>
(<divs*?id=("|&quot;|&#34;)content("|&quot;|&#34;).*?>)

  (?>
      .*?</div>
    |
      .*?<div (?>depth)
    |
      .*?</div> (?>-depth)
  )*)
  (?(depth)(?!))
.*?</div>

您必须使用单行选项.以下是使用控制台的示例:

using System;
using System.Text.RegularExpressions;

namespace Temp
{
    class Program
    {
        static void Main()
        {
            string s = @"
<div id=""firstdiv"">begining content<div id=""content"">some other stuff
  <div id=""otherdiv"">other stuff here</div>
  more stuff
  </div>
</div>";
            Regex r = new Regex(@"(?<text>(<divs*?id=(""|&quot;|&#34;)"
                + @"content(""|&quot;|&#34;).*?>)(?>.*?</div>|.*?<div "
                + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>",RegexOptions.Singleline);
            Console.WriteLine("HTML:n");
            Console.WriteLine(s);
            Match m = r.Match(s);
            if (m.Success)
            {
                Console.WriteLine("nCaptured text:n");
                Console.WriteLine(m.Groups[4]);

            }
            Console.ReadLine();
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读