Подтвердить что ты не робот

Как извлечь строку между двумя другими строками в python?

Как будто у меня есть строка типа str1 = "IWantToMasterPython"

Если я хочу извлечь "Py" из приведенной выше строки. Я пишу:

extractedString = foo("Master","thon")

Я хочу сделать все это, потому что я пытаюсь извлечь тексты с html-страницы. Тексты песен написаны как <div class = "lyricbox"> ....lyrics goes here....</div>.

Любые предложения о том, как я могу реализовать.

4b9b3361

Ответ 1

Решение состоит в использовании регулярного выражения:

import re
r = re.compile('Master(.*?)thon')
m = r.search(str1)
if m:
    lyrics = m.group(1)

Ответ 2

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 также полезен, если вы хотите сделать еще несколько синтаксических разборов.

Ответ 3

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, но я думаю, что этот подход с чистой строкой проще.

Ответ 4

Если вы извлекаете какие-либо данные с html-страницы, я настоятельно рекомендую использовать библиотеку BeautifulSoup. Я использовал его также для извлечения данных из html, и он отлично работает.

Ответ 5

Вы также можете попробовать это, если вам понравятся все вхождения, выводимые в списке:

import re
str1 = "IWantToMasterPython"

out  = re.compile('Master(.*?)thon', re.DOTALL |  re.IGNORECASE).findall(str1)
if out :
    print out