gpt4 book ai didi

html - Regex Match 内部匹配

转载 作者:行者123 更新时间:2023-12-02 03:55:03 25 4
gpt4 key购买 nike

我在使用正则表达式时遇到了一些问题。我需要在一个长的 HTML 页面中推断这部分文本:

<li class="menuItem">
<a class="menuItem" href="/site/ContactUs.aspx?section=510">
<span class="posNR">3.
</span>Contact Us<span class="shortDesc"></span><span class="line"></span>
</a>
</li>

另一个问题是我有一些格式如下的字符串:

<li class="menuItem"><a class="menuItem" href="/site/ContactUs.aspx?section=510"><span class="posNR">3.</span>Contact Us<span class="shortDesc"></span><span class="line"></span></a></li>

在其他一些地方我有这个:

<li class="menuItem">
<a class="menuItem" href="/site/ContactUs.aspx?section=510">
<span class="posNR">3.
</span>Contact Us<span class="shortDesc"></span><span class="line"></span></a>
</li>

我想从这里提取这个特定部分,例如:

        <li class="menuItem">
<a class="menuItem" href="/site/News.aspx?section=316&amp;ViewType=Actual&amp;IdType=316">
<span class="posNR">2.
</span>News<span class="shortDesc"></span><span class="line"></span></a>
asdsdasda </li>


<li class="menuItem">
<a class="menuItem" href="/site/ContactUs.aspx?section=510">
<span class="posNR">3.
</span>Contact Us<span class="shortDesc"></span><span class="line"></span></a>
</li>


</ul>

到目前为止,我已经尝试了一些正则表达式,比如

(<li*[\s\S]*?<\/li>)

我在记事本++ 和/或 Visual Studio Code 中使用这个正则表达式。

最佳答案

使用这个正则表达式:

(<li(?:(?!<li)[\s\S])*?ContactUs[\s\S]*?<\/li>)

此模式通过调整 [\s\S] 使用经过调整的贪婪 token 解决方案不允许 <li(?:(?!<li)[\s\S])* .您可以阅读更多相关信息 here and when to use it.

  • <li匹配起始文字 <li
  • (?:(?!<li)[\s\S])*?具有负循环的惰性非捕获组 (?!这确保了另一个 <li不在比赛中。这已被添加,以便 <li... <li... </li>与整个事物不匹配,但仅与第二个 <li> 匹配
  • ContactUs匹配文字,因为条件表明 ContactUs必须出现在匹配 li
  • [\s\S]*?匹配任何字符(懒惰地)
  • <\/li>匹配关闭</li>

Regex101 Demo

希望这对您有所帮助!

关于html - Regex Match 内部匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44282167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com