Задать вопрос

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

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

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
30 янв. 2025, в 21:33
5000 руб./за проект
30 янв. 2025, в 21:14
4000 руб./за проект
30 янв. 2025, в 19:55
7000 руб./за проект