Как исправить это регулярное выражение?

Здравствуйте. Написал такое регулярное выражение:
([^ =]+)=\"?([^ \"]+)\"?
Применяться будет на HTML коде (ищет пары параметр="значение"). Как дополнить это выражение так, чтобы оно искало только по тегам . Например некоторый код содержит фрагмент:
<input type="hidden" name="Sample" value="0">
Поиск должен вернуть имен и значений параметров type, name, value. Пытался сделать так:
<input(?: ?([^ =]+)=\"?([^ \"]+)\"?)+>
Однако получаю на выходе только последнюю пару, поэтому прошу помощи экспертов.
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
@abcd0x00
Используй lxml.html для разбора html.

>>> import lxml.html
>>> 
>>> s = """<input type="hidden" name="Sample" value="0">"""
>>> 
>>> node = lxml.html.fromstring(s)
>>> node
<InputElement b74340ec name='Sample' type='hidden'>
>>> node.attrib
{'type': 'hidden', 'name': 'Sample', 'value': '0'}
>>>


Если же собрался использовать регулярки, то надо сделать в два этапа: 1) сначала выделить все нужные теги, которые будешь разбирать; 2) затем из выбранных тегов уже выбирать атрибуты. Возможно, понадобятся две регулярки (одна для выбора тегов, другая для выбора атрибутов), но это неважно. Главное, что у тебя разные задачи не должны сливаться в одной регулярке, так как это не только её усложнит (невозможно будет читать), но и приведёт к невидимым ошибкам, из-за которых оно в каких-то случаях будет неправильно разбираться и ты это сразу не заметишь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
/\s+([^\s]+)=["']([^"']+)["']/g
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы