缺少html标记属性时正则表达式无法捕获

时间:2018-04-28 21:25:19

标签: regex html-parsing

当html链接没有href="http://www.example.com"时,我在使这个正则表达式工作时遇到了一些麻烦。 <ul class='social'>(...)</ul>始终存在于每个页面上,但某些锚标记会遗漏href属性。

正是在这里,我的尝试失败了,因为当href=""在那里时,我能够用

捕获该组

<a href="(.*?)" id="facebooklink" style="display:none;" class="facebook facebooklink" title="Become a fan on Facebook">Become a fan on Facebook<span></span></a>

另一方面,如果案例与下面的情况类似,如果缺少一个或多个href,则即使具有href属性和值的<ul class="social"> <li> <a id="facebooklink" style="display:none;" class="facebook facebooklink" title="Become a fan on Facebook">Become a fan on Facebook<span></span></a> </li> <li> <a href="https://twitter.com/StackOverflow" id="twitterlink" style="display:none;" class="twitter twitterlink" title="Follow us on Twitter">Follow us on Twitter<span></span></a> </li> <li> <a id="linkedinlink" style="display:none;" class="linkedin linkedinlink" title="Follow us on LinkedIn">Follow us on LinkedIn<span></span></a> </li> </ul> 也不会捕获。在我的示例中,它至少应该捕获https://twitter.com/StackOverflow组。

我正在使用的正则表达式可以在这里看到:https://regex101.com/r/iJ9tC7/12

from Tkinter import *

Calculette=Tk()
Calculette.title("Calculette")
Chiffres=StringVar

B7=Button(Calculette, text="7").grid(column=0, row=1)
B8=Button(Calculette, text="8").grid(column=1, row=1)
B9=Button(Calculette, text="9").grid(column=2, row=1)

B4=Button(Calculette, text="4").grid(column=0, row=2)
B5=Button(Calculette, text="5").grid(column=1, row=2)
B6=Button(Calculette, text="6").grid(column=2, row=2)

B1=Button(Calculette, text="1").grid(column=0, row=3)
B2=Button(Calculette, text="2").grid(column=1, row=3)
B3=Button(Calculette, text="3").grid(column=2, row=3)

Bfois=Button(Calculette, text="x").grid(column=3, row=3)
Bmoins=Button(Calculette, text="-").grid(column=3, row=2)
Bdivision=Button(Calculette, text="/").grid(column=3, row=4)
Bplus=Button(Calculette, text="+").grid(column=3, row=1)
Begal=Button(Calculette, text="=").grid(column=3, row=5)

Affichage=Entry(Calculette, textvariable=Chiffres).grid(column=0, row=0)

Calculette.mainloop

提前感谢您对此问题的任何帮助,我已经尝试了很多可能的解决方案,但不是正确的解决方案。

1 个答案:

答案 0 :(得分:0)

回答我的问题,经过多次尝试用正则表达式来解决问题,因为问题已经出现,并且在来到这里试图向我提出问题的人的帮助下,我找到了一个适用于元素上缺少href=""属性。

由于curl的结果可能有或没有它,但块总是在那里,我只是为这三个链接添加了以下php代码:

$result = str_replace('<a id="facebooklink"','<a href="NULL" id="facebooklink"', $result);
$result = str_replace('<a id="twitterlink"','<a href="NULL" id="twitterlink"', $result);
$result = str_replace('<a id="linkedinlink"','<a href="NULL" id="linkedinlink"', $result);

这样做是为了从元素中添加缺少的href="",现在,即使一个失败,其他人也会返回匹配。

由于系统处理得很好而且在这一点上并不那么昂贵,但并不那么担心它。