• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

Suzana Me

Member
03.06.2021
8
0
BIT
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 ничего не может найти с регулярным выражением.
 
Последнее редактирование:

Suzana Me

Member
03.06.2021
8
0
BIT
0
Я нахожу решение. Регулярное выражение пытается перевести все внутреннее содержимое тегов, однако вы, что часть содержимого метатега не является внутренним содержимым. Мне пришлось сделать отдельную проверку, чтобы увидеть, был ли это метатег, а затем сделал перевод специально для метатега под этой проверкой.

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

Код:
 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)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!