2

我已经用Pythex测试了我的正则表达式,它按预期工作:

的HTML:

Something Very Important (SVI) 2013 Sercret Information, Big Company
Name (LBCN) Catalog Number BCN2013R18 and BSSN 3-55564-789-Y, was
developed as part of the SUP 2012 Something Task force was held in
conjunction with <a href="http://justaURL.com">*SEM    2013</a>, the second joint conference on study of
banana hand grenades and gorilla tactics (Association of Ape Warfare
Studies) interest groups BUDDY HOLLY and LION KING. It is comprised of
one hairy object containing 750 gross stories told in the voice of
Morgan Freeman and his trusty sidekick Michelle Bachman.

我的正则表达式:

,[\s\w()-]+,

当与Pythex 一起使用时,它会选择我要查找的区域,该区域位于段落中的 2 个逗号之间:

非常重要的事情 (SVI) 2013 保密信息,大公司名称 (LBCN) 目录号 BCN2013R18 和 BSSN 3-55564-789-Y,是作为 SUP 2012 事情工作组的一部分与 <a href=" http://justaURL.com">*SEM 2013</a>,第二届香蕉手榴弹和大猩猩战术研究联合会议(猿战研究协会)利益集团 BUDDY HOLLY 和 LION KING。它由一个毛茸茸的物体组成,其中包含 750 个以摩根弗里曼和他可信赖的伙伴米歇尔巴赫曼的声音讲述的故事。

但是,当我使用 BeautifulSoup 的文本正则表达式时:

print HTML.body.p.find_all(text=re.compile('\,[\s\w()-]+\,'))

我返回的是这个而不是逗号之间的区域:

[u'Something Very Important (SVI) 2013 Sercret Information, Big Company Name (LBCN) Catalog Number BCN2013R18 and BSSN 3-55564-789-Y, was developed as part of the SUP 2012 Something Task force was held in conjunction with ']

我也尝试过转义逗号,但没有成功。美丽的汤只是想返回整个<p>而不是我指定的正则表达式。我还注意到它返回段落直到中间的那个链接。这是我使用 BeautifulSoup 的问题还是正则表达式问题?

4

1 回答 1

3

BeautifulSoup 使用正则表达式来搜索匹配的元素。整个文本节点与您的搜索匹配。

然后你仍然必须提取你想要的部分;BeautifulSoup 不会为您执行此操作。你可以在这里重用你的正则表达式:

expression = re.compile('\,[\s\w()-]+\,')
textnode = HTML.body.p.find_all(text=expression)
print expression.search(textnode).group(0)
于 2013-10-24T17:29:50.653 回答