就像我有一个像str1 = "IWantToMasterPython"
如果我想从上面的字符串中提取"Py"
。我写道:
extractedString = foo("Master","thon")
我想做所有这些因为我试图从html页面中提取歌词。歌词写成<div class = "lyricbox"> ....lyrics goes here....</div>
。
有关如何实施的任何建议。
答案 0 :(得分:31)
解决方案是使用正则表达式:
import re
r = re.compile('Master(.*?)thon')
m = r.search(str1)
if m:
lyrics = m.group(1)
答案 1 :(得分:10)
BeautifulSoup是做你想做的最简单的方法。它可以安装如下:
sudo easy_install beautifulsoup
执行您想要的示例代码是:
from BeautifulSoup import BeautifulSoup
doc = ['<div class="lyricbox">Hey You</div>']
soup = BeautifulSoup(''.join(doc))
print soup.find('div', {'class': 'lyricbox'}).string
您可以使用Python的urllib直接从网址抓取内容。如果你想进行更多的解析,Beautiful Soup doc也很有帮助。
答案 2 :(得分:8)
def foo(s, leader, trailer):
end_of_leader = s.index(leader) + len(leader)
start_of_trailer = s.index(trailer, end_of_leader)
return s[end_of_leader:start_of_trailer]
如果领导者不在字符串s中,或者在那之后没有预告片(你没有在这样的异常条件中指定你想要的行为),那么这会引发ValueError;提出异常是非常自然和Pythonic要做的事情,让调用者通过try / except处理它,如果它知道在这种情况下该怎么做)。
基于RE的方法也是可行的,但我认为这种纯字符串方法更简单。
答案 3 :(得分:2)
如果您从html页面中提取任何数据,我强烈建议您使用BeautifulSoup库。我也用它从html中提取数据,效果很好。
答案 4 :(得分:2)
如果您想要在列表中输出所有匹配项,也可以尝试此操作:
import re
str1 = "IWantToMasterPython"
out = re.compile('Master(.*?)thon', re.DOTALL | re.IGNORECASE).findall(str1)
if out :
print out