RegEx для соответствия тегов HTML - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь использовать регулярное выражение для извлечения начальных тегов в строках заданного HTML-кода. В следующих строках я ожидаю получить только начальные теги body и h1 в первой строке, а html, head и title в качестве начальных тегов во второй строке:

Я уже пытался сделать это, используя следующее регулярное выражение:

start_tags = re.findall(r'<(\w+)\s*.*?[^\/]>',line)

'<body data-modal-target class=\'3\'><h1>Website</h1><br /></body></html>'
'<html><head><title>HTML Parser - II</title></head>'

Но мой вывод для первой строки: ['body', 'h1', 'br'], хотя я не ожидаю поймать 'br', поскольку я исключил '/'.

И для второй строки это ['html', 'title'], тогда как я ожидаю, что поймать и 'head'. Было бы здорово, если бы вы сообщили мне, какая часть моего кода неверна?

1 Ответ

0 голосов
/ 12 мая 2019

Если вы хотите сделать это с помощью регулярных выражений, вы можете создать несколько различных выражений, шаг за шагом.Возможно, вы сможете соединить их, используя ИЛИ трубы, но это может быть необязательно.

RegEx 1 для тегов h1-h6

Эта ссылка помогает вам захватывать теги тела, исключая тело и голову:

(<(.*)>(.*)</([^br][A-Za-z0-9]+)>)

Возможно, вы захотите добавить к нему больше границ,Например, вы можете заменить (.*) списками символов [].

enter image description here

RegEx Circuit

This ссылка помогает визуализировать выражения:

enter image description here

RegEx 2 для головы и тела

для тегов головы и тела,Возможно, вы захотите пролистать новые строки, которые вы можете выражение, подобное :

(<head>([\s\S]*)<\/head>)|(<body>([\s\S]*)</body>)

enter image description here

Производительность

Эти выражения довольно дороги, вы можете их упростить, или написать несколько других сценариев для анализа ваших HTML, или, возможно, найти HTML-анализатор для этого.

...