如何在Python中提取两个字符串之间的字符串?
比如我有一个字符串 str1 = "IWantToMasterPython"
如果我想从这个字符串中提取 "Py"
,我可以这样写:
extractedString = foo("Master","thon")
我想这么做是因为我正在尝试从一个html页面中提取歌词。歌词的格式是 <div class = "lyricbox"> ....歌词在这里....</div>
。
有没有什么建议可以帮我实现这个?
5 个回答
9
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),或者在开头之后找不到指定的结尾部分(trailer),就会出现一个叫做 ValueError 的错误。这里没有说明在这种异常情况下你希望程序怎么处理;抛出一个错误是很自然的做法,这样调用这个功能的代码可以用 try/except 来处理这个错误,如果它知道该怎么做的话。
当然,也可以用正则表达式的方法来解决这个问题,但我觉得用纯字符串的方法更简单。
11
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的文档也会很有帮助。
33
解决办法是使用正则表达式:
import re
r = re.compile('Master(.*?)thon')
m = r.search(str1)
if m:
lyrics = m.group(1)