Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
524 / 512 / 129
Регистрация: 31.10.2016
Сообщений: 4,156

Регулярное выражение для удаления таблицы стилей

13.10.2023, 01:28. Показов 1181. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается удалить таблицу стилей, расположенную вверху html документа. Вот регулярное выражение, но оно не работает
Python
1
RE_STYLE = re.compile(r"<style([.]*)</style>", re.DOTALL)
как сделать правильно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.10.2023, 01:28
Ответы с готовыми решениями:

Регулярное выражение для удаления
Здравствуйте! Подскажите, пожалуйста как в ворде из строчки &quot;Несмотря на Ваше терпение, мы приносим извинения: Трам пам пам ; спасибо за...

Регулярное выражение для удаления символа
Написать регулярное выражение, удалиющее все буквы &quot;b&quot; из строки

Регулярное выражение для удаления символов
Добрый день! помогите, пожалуйста, составить запрос для замены BJ1-206W на BJ1-206 тоесть удалить W в конце артикулов 206 цифра...

15
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
13.10.2023, 09:08
я бы такое взял
Code
1
<style.*?</style>
2
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
13.10.2023, 09:35
Цитата Сообщение от Alexis333 Посмотреть сообщение
[.]
В квадратных скобках (класс символов), многие метасимволы распознаются как обычные литералы. По сути, в классе символов существует отдельный синтаксис, который отличается от обычного синтаксиса регулярных выражений. Точка - один из таких метасимволов, распознаваемых как обычный литерал, внутри класса - это именно точка.
1
524 / 512 / 129
Регистрация: 31.10.2016
Сообщений: 4,156
13.10.2023, 10:37  [ТС]
YuS_2, а зачем у igorrr37, знак вопроса? Точка любой символ, звёздочка - от 0 до бесконечности, знак вопрос не пойму зачем ...

Добавлено через 35 минут
Я пробовал очень много всяких вариантов и примеров из инет. К сожалению,с регулярными выражениями ничего не выходит. Всё равно остаётся много "шелухи". Единственное, что приходит в голову, это возможное появление вложенных тегов, типа <style ... <style ..... </style> .... Пока рабочее решение такое
Python
1
2
3
j=htm.rfind("</style>")
k=htm.find('<style', 0, j-7)
htm=htm[:k-1]+htm[j+8:]
удаляет всё что нужно.
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
13.10.2023, 10:39
Цитата Сообщение от Alexis333 Посмотреть сообщение
а зачем у igorrr37, знак вопроса?
этот метасимвол, в таком варианте применения, переопределяет предыдущий метасимвол как "нежадный/ленивый", иначе было бы так:
ссылка 1,
в отличии от:
ссылка 2
1
524 / 512 / 129
Регистрация: 31.10.2016
Сообщений: 4,156
13.10.2023, 10:47  [ТС]
Ссылки не работают. А тогда <style.+</style> то не тоже самое? Тоже вроде нежадный
0
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
13.10.2023, 11:59
Цитата Сообщение от Alexis333 Посмотреть сообщение
появление вложенных тегов, типа <style ... <style ..... </style>
если вложенные то знак вопроса убери
1
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
13.10.2023, 12:03
Цитата Сообщение от Alexis333 Посмотреть сообщение
Ссылки не работают
Они работают. Сервер, возможно, был перегружен... попробуйте позже.

Цитата Сообщение от Alexis333 Посмотреть сообщение
Тоже вроде нежадный
Вам надо почитать про регулярные выражения... квантификаторы "*" и "+", по умолчанию жадные, ленивыми их делает как раз, последующий "?".
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
13.10.2023, 13:35
Цитата Сообщение от igorrr37 Посмотреть сообщение
если вложенные то знак вопроса убери
Тогда регулярка захватит все поголовно от первого <style> до последнего </style>. Т.е. может вообще страниу целиком зохавать

Добавлено через 1 минуту
Alexis333, помимо DOTALL, подними флаг MULTILINE

Добавлено через 1 минуту
Python
1
r'(?ms)<style.+?/style>'
3
524 / 512 / 129
Регистрация: 31.10.2016
Сообщений: 4,156
13.10.2023, 15:40  [ТС]
С этими выражениями не так то просто. Вот например выражение ищет "=45=2A ..." и декодирует:

Python
1
txt = re.sub(r"(=[0-9A-F][0-9A-F])+", repl, r)
вот функция repl
Python
1
2
3
4
5
6
def repl(m):
    y=m[0].replace("=", "")
    byte = bytes.fromhex(y[:2])
    for c in range(2,len(y),2):
        byte+=bytes.fromhex(y[c:c+2])
    return byte.decode('utf-8')
работает через раз, начало строки может не захватывать, остаётся обгрызок

А вот та функция работает корректно

Python
1
2
3
4
5
6
7
8
9
10
11
  
                k=r.find('=')
                while k !=-1:
                    txt += r[:k]       
                    byte = bytes.fromhex(r[k+1:k+3])
                    while k+3<len(r) and r[k+3]=='=':
                        k+=3; byte += bytes.fromhex(r[k+1:k+3])
                    txt += byte.decode(f[0])
                    r=r[k+3:]
                    k=r.find('=')
                txt+=r
вроде делает тоже самое. В чём здесь ошибка? я никак не могу понять

Добавлено через 20 минут
извиняюсь, всё работает одинаково, просто не заметил что текст добавляется к уже сформированному (txt+= вместо txt=)

Добавлено через 1 час 3 минуты
iSmokeJC, я поставил Ваш вариант, кажется работает, но хотелось бы выяснить некоторые вопросы:
1 что делает (?ms)
2 зачем ставить re.MULTILINE ведь re.DOTALL и так захватывает любые символы? что поменяется если не ставить re.MULTILINE ???
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
13.10.2023, 15:47
Цитата Сообщение от Alexis333 Посмотреть сообщение
что делает (?ms)
Вот оно и выставляет эти флаги. Прям в теле регулярки.
Цитата Сообщение от Alexis333 Посмотреть сообщение
что поменяется
Ну попробуй без мультилайна, сравни
0
524 / 512 / 129
Регистрация: 31.10.2016
Сообщений: 4,156
13.10.2023, 16:02  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Вот оно и выставляет эти флаги
намекаешь на то, что флаги re.MULTILINE и re.DOTALL при таком подходе можно не дописывать?

я конечно попробую без MULTILINE (надеюсь что это делается так r'(?s)<style.+?/style>'), но боюсь сразу не увидеть разницы,
а косяки всплывут в самый неудобный момент
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
13.10.2023, 16:07
Цитата Сообщение от Alexis333 Посмотреть сообщение
намекаешь на то, что флаги re.MULTILINE и re.DOTALL при таком подходе можно не дописывать?
Не намекаю, а прямо говорю - это они и есть, дописывать ничего не надо.
Цитата Сообщение от Alexis333 Посмотреть сообщение
но боюсь сразу не увидеть разницы
Ну и поставь оба флага, хуже не будет
0
524 / 512 / 129
Регистрация: 31.10.2016
Сообщений: 4,156
13.10.2023, 18:48  [ТС]
хорошо

Добавлено через 2 часа 33 минуты
iSmokeJC, я совсем запутался, вот у меня шаблон (взял из инета)
Python
1
RE_TAGS = re.compile(r"<([^>]+)>", re.UNICODE)
применяю его к тексту
Python
1
htm=RE_TAGS.sub('', htm)
всё работает, теги убираются.

Тут я решил, что компилировать ничего не нужно и можно просто применить его кк обычно, т.е. так
Python
1
htm = re.sub(r"<([^>]+)>", '', htm, re.UNICODE)
а он и не работает, причём совсем, будто той команды и не вовсе. Это так и должно быть, или я что то неправильно делаю?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
13.10.2023, 19:05
Странно. Должно работать. Компилировать имеет смысл когда регулярка используется стопицот раз, например в цикле. А так разницы нет.
Хз вобщем
1
524 / 512 / 129
Регистрация: 31.10.2016
Сообщений: 4,156
13.10.2023, 19:14  [ТС]
Я разобрался, то из-за флага, перед ним нужно указать максимальное число замен, вот так
Python
1
htm = re.sub(r"<([^>]+)>", '', htm, count=0, flags=re.UNICODE)
count=0 значит неограниченно. Если без флага, то нормально, при компиляции count не нужен и тоже всё нормально, а так вылетает ошибка, т.к. re.UNICODE встаёт на место count. Сейчас всё работает нормально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2023, 19:14
Помогаю со студенческими работами здесь

Регулярное выражение для удаления IP-адресов
В текстовом файле могут содержаться (как отдельные слова) IP-адреса компьютеров в формате d.d.d.d, где d – целое число из диапазона от 0 до...

Регулярное выражение для удаления html entities
Как в тексте заменить вот такие данные &quot;&amp; # 9 9 8 9 ;&quot; (эмодзи, специально пробелами здесь разбил а то выводится как эмодзи) пустой...

Регулярное выражение для удаления лишнего из ссылки
Добрый вечер всем. Нужна помощь в написании регулярного выражения, я в них совсем баран, поэтому может быть кто то подскажет как мне...

Регулярное выражение для удаления URL из строки
Задача состоит в том, чтоб находить УРЛ в строке Например в названии файла: imagewww.не понятно нафига всунутый урл.ru].jpg Удалятся...

Регулярное выражение для удаления всех похожих строк
Есть модуль для парсинга SimplePars, работает на Опенкарт и для поиска и замены использует в том числе регулярные выражения. В инструкции к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru