Исходя из ваших вопросов и комментариев, я думаю, что получение индексов подстрок и работа с целым подмножеством HTML может сделать то, что вам нужно.
Давайте создадим функцию для извлечения всех из индексов подстроки сначала (см. ответ @AkiRoss):
def findall(p, s):
i = s.find(p)
while i != -1:
yield i
i = s.find(p, i+1)
Затем используйте это, чтобы найти вхождения <b>
и </b>
.
opening_b_occurrences = [i for i in findall('<b>', html)]
# has the value of [21, 40, 58]
closing_b_occurrences = [i for i in findall('</b>', html)]
# has the value of [28, 44, 67]
Теперь вы можете использовать эту информацию, чтобы получить подстроку HTML для выполнения извлечения текста:
first_br = opening_b_occurrences[0]
last_br = closing_b_occurrences[-1] # getting the last one from list
text_inside_br = html[first_br:last_br]
Текст в text_inside_br
теперь должен быть '<b>This</b>\n" is "\n<b>a</b>\n" test "\n<b>string'
. Вы можете очистить его сейчас, например, добавив к нему </br>
и используя BeautifulSoup для извлечения значений, или просто , используя для этого регулярное выражение.