如果我有一个字符串 str1 = "IWantToMasterPython"
如果我想从上面的字符串中提取 "Py"
,我会写:
extractedString = foo("Master","thon")
我之所以要做这一切,是因为我正在尝试从一个HTML页面中提取歌词。 歌词的格式为<div class = "lyricbox"> ....歌词在这里....</div>
。有什么建议可以实现吗?解决方法是使用正则表达式:
import re
r = re.compile('Master(.*?)thon')
m = r.search(str1)
if m:
lyrics = m.group(1)
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
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中不存在leader,或者在leader后面不存在trailer,那么这将引发ValueError错误(您尚未指定您希望在这种异常情况下采取的行为;引发异常是一种很自然和Pythonic的做法,让调用者使用try/except处理这种情况,如果它知道如何处理这些情况)。
基于RE的方法也是可能的,但我认为这种纯字符串方法更简单。
import re
str1 = "IWantToMasterPython"
out = re.compile('Master(.*?)thon', re.DOTALL | re.IGNORECASE).findall(str1)
if out :
print out