如何在Python中提取两个字符串之间的字符串?

19 投票
5 回答
28310 浏览
提问于 2025-04-15 14:03

比如我有一个字符串 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)

撰写回答