我正在尝试为另一个脚本编写一个小函数,从“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],使代码更清晰,字符串操作更少。保留这个问题以备将来参考和其他有类似问题的人。
答案 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库用于这些目的。