ВОПРОС · Q&A

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

2 ответов 2,4 тыс.
Автор вопроса
Привет. У меня небольшая проблема с 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)