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

Python - использование регулярных выражений для поиска нескольких совпадений и их распечатки

Мне нужно найти содержимое форм из исходного файла HTML, я сделал некоторые поиски и нашел очень хороший метод для этого, но проблема в том, что он печатает только в первом найденном, как я могу его пропустить и вывести всю форму содержимое, а не только первое?

line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matchObj = re.search('<form>(.*?)</form>', line, re.S)
print matchObj.group(1)
# Output: Form 1
# I need it to output every form content he found, not just first one...
4b9b3361

Ответ 1

Не используйте регулярные выражения для разбора HTML.

Но если вам когда-нибудь понадобится найти все совпадения регулярных выражений в строке, используйте функцию findall.

import re
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matches = re.findall('<form>(.*?)</form>', line, re.DOTALL)
print(matches)

# Output: ['Form 1', 'Form 2']

Ответ 2

Вместо использования re.search используйте re.findall, он вернет вам все совпадения в List. Или вы также можете использовать re.finditer (который мне больше всего нравится), он вернет Iterator Object, и вы можете просто использовать его для повторения всех найденных совпадений.

line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
for match in re.finditer('<form>(.*?)</form>', line, re.S):
    print match.group(1)

Ответ 3

Использование регулярных выражений для этой цели является неправильным подходом. Поскольку вы используете python, у вас есть действительно потрясающая библиотека, доступная для извлечения частей из HTML-документов: BeautifulSoup.