使用python正则表达式在HTML中查找随机句子

时间:2013-04-26 23:54:05

标签: python html regex

我正在尝试为另一个脚本编写一个小函数,从“http://subfusion.net/cgi-bin/quote.pl?quote=humorists&number=1”中提取生成的文本 从本质上讲,我需要它来拉动<之间的任何句子。 BR>标签。

我一直在尝试使用正则表达式,但我从来没有真正能够掌握它们 我所做的所有搜索都提到了拉动特定句子或单个单词的东西 然而,这需要拉出<之间的任意字符串。 BR>标签

任何人都可以帮助我吗?感谢。

我能想到的最好:

html = urlopen("http://subfusion.net/cgi-bin/quote.pl?quote=humorists&number=1").read()
output = re.findall('\<br>.*\<br>', html)

编辑:结束使用不同的方法,简单地将HTML拆分为由&lt;分隔的列表。 BR&GT;并拉[3],使代码更清晰,字符串操作更少。保留这个问题以备将来参考和其他有类似问题的人。

4 个答案:

答案 0 :(得分:0)

您需要使用DOTALL标志,因为表达式中需要匹配新行。我会用

re.findall('<br>(.*?)<br>', html, re.S)

但是会返回多个结果,因为该页面上有一堆<br><br>。您可能想要使用更具体的内容:

re.findall('<hr><br>(.*?)<br><hr>', html, re.S)

答案 1 :(得分:0)

from urllib import urlopen
import re
html = urlopen("http://subfusion.net/cgi-bin/quote.pl?quote=humorists&number=1").read()
output = re.findall('<body>.*?>\n*([^<]{5,})<.*?</body>', html, re.S)

if (len(output) > 0):
    print(output)
    output = re.sub('\n', ' ', output[0])
    output = re.sub('\t', '', output)
    print(output)

<强>终端

imac2011:Desktop allendar$ python test.py 
['A black cat crossing your path signifies that the animal is going somewhere.\n\t\t-- Groucho Marx\n\n']

A black cat crossing your path signifies that the animal is going somewhere. -- Groucho Marx

您还可以删除最终的\n并使用<br />替换文本中的所有内容(在较长的引号上),如果您再次在HTML中显示它,那么您将保留原始文本视线断线。

答案 2 :(得分:0)

该页面的所有笑话都有相同的模型,没有含糊不清的东西,你可以使用这个

output = re.findall('(?<=<br>\s)[^<]+(?=\s{2}<br)', html)

无需使用dotall标志,因为没有点。

答案 3 :(得分:0)

现在是7年后,但是供以后参考:

按照Floris在评论中的建议,将beautifulsoup库用于这些目的。