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