• Новый бот-ассистент на форуме Codeby

    Теперь на форуме работает ИИ-помощник @bot_cdb — твой технический ассистент по информационной безопасности. Просто упомяни @bot_cdb в любой теме, и получишь быстрый ответ на вопросы по CVE, инструментам, техникам атак и защиты. Бот анализирует весь тред перед ответом, проверяет актуальность данных и может предложить дополнительную помощь. Особенно полезен для проверки технических деталей, поиска документации и быстрых консультаций по пентесту, малвари, форензике и другим областям ИБ.

Python: некоторые регулярные выражения не работают, если строка не начинается и не заканчивается одним и тем же символом

Suzana Me

Member
03.06.2021
8
0
Привет. У меня небольшая проблема с Python и Regex. Фактически, некоторые регулярные выражения не работают, если строка не начинается и не заканчивается одним и тем же символом. Например, у меня есть HTML-теги:

Код:
pattern1 = r'<p class="text_obisnuit">.*((bebe|oana|mother|sun).*){3,}.*</p>'
pattern2 = r'<p class="text_obisnuit2">.*((bebe|oana|mother|sun).*){3,}.*</p>'
pattern3 = r'<title>.*((bebe|oana|mother|sun).*){3,}.*</title>'
pattern4 = r'<meta name="description" content=.*((bebe|oana|mother|sun).*){3,}.*>'

Первые 3 тега работают, потому что строка начинается и заканчивается одним и тем же символом.

Но тег 4 с метаописанием не работает. Python ничего не может найти с регулярным выражением.
 
Последнее редактирование:
Я нахожу решение. Регулярное выражение пытается перевести все внутреннее содержимое тегов, однако вы, что часть содержимого метатега не является внутренним содержимым. Мне пришлось сделать отдельную проверку, чтобы увидеть, был ли это метатег, а затем сделал перевод специально для метатега под этой проверкой.

Итак, после этого регулярного выражения я должен добавить этот код:

Код:
 for pattern in patterns:
                for x in re.finditer(pattern, page):
                    updated = True
                    new = x.group(0)
                    soup = BeautifulSoup(new, 'html.parser')
                    if pattern != pattern4:
                        recursively_translate(soup)
                    else:
                        meta = soup.find('meta')
                        meta['content'] = translator.translate(meta['content'], dest=destination_language).text
                    soup = soup.encode(formatter=UnsortedAttributes()).decode('utf-8')
                    page = page.replace(new, soup)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab