Ответ 1
Решение состоит в использовании регулярного выражения:
import re
r = re.compile('Master(.*?)thon')
m = r.search(str1)
if m:
lyrics = m.group(1)
Как будто у меня есть строка типа str1 = "IWantToMasterPython"
Если я хочу извлечь "Py"
из приведенной выше строки. Я пишу:
extractedString = foo("Master","thon")
Я хочу сделать все это, потому что я пытаюсь извлечь тексты с html-страницы. Тексты песен написаны как <div class = "lyricbox"> ....lyrics goes here....</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
Вы можете использовать Python urllib, чтобы напрямую захватывать контент из URL-адреса. Beautiful Soup doc также полезен, если вы хотите сделать еще несколько синтаксических разборов.
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]
это вызывает ValueError, если лидер отсутствует в строке s или трейлер отсутствует после этого (вы не указали, какое поведение вы хотите в таких аномальных условиях, а создание исключения - довольно естественная и питоническая вещь, позволяя вызывающему агенту обрабатывать это с помощью try/except, если он знает, что делать в таких случаях).
Также возможен подход на основе RE, но я думаю, что этот подход с чистой строкой проще.
Если вы извлекаете какие-либо данные с html-страницы, я настоятельно рекомендую использовать библиотеку BeautifulSoup. Я использовал его также для извлечения данных из html, и он отлично работает.
Вы также можете попробовать это, если вам понравятся все вхождения, выводимые в списке:
import re
str1 = "IWantToMasterPython"
out = re.compile('Master(.*?)thon', re.DOTALL | re.IGNORECASE).findall(str1)
if out :
print out