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...
Ответы
Ответ 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.