Требуется помощь в регулярном выражении Python

#python #regex #web-scraping

Вопрос:

Я пытался удалить ссылку из файла .eml, но каким-то образом я всегда получаю

Ответ №1:

ДА. Ты прав. Просто удалите пробелы и новые строки из необработанного текста. Например:

 link = re.findall("CONFIRM<([^s] )>", raw_email.replace('n', '').replace(' ', ''))
 

Ответ №2:

По сути, вы хотите получить все, что находится между CONFIRM< и > .

  • Удалите пробелы в необработанном URL-адресе, заменив их пустыми строками.
  • (.*?) будет захватывать все между CONFIRM< и >
  • Используется .group(1) для получения фактической захваченной строки
 import re
def get_url(raw):
    raw = raw.replace(' ', '')
    url = re.search('CONFIRM<(.*?)>', raw).group(1)
    return url
 

Для приведенного тестового примера.

 raw_url = 'Please click "CONFIRM" below. CONFIRM<https://app.rule.io/subscriber/optIn?token=3DeyJ0eXAiOiJKV1QiLCJhbG= ciOiJIUzI1NiJ9.eyJzdWIiOjEssswrgTA3OCwic3Vic2NyaWJlckZvcm0iOjExOTAsImlzcyI6= Imh0dHBzOi8vYawetgg1bGUuaW8iLCJpYXQiOjE2MjM1NzkwMDYsImV4cCI6MTYyNDE4MzgwNiw= ibmJmIjoxNjIzNTc5MDA2LCJqdGkiOiJEbHMyeDJmcG5pZEhTWXVjwjwje-52uhXlj9efaEwzfI= Rruoiqc3RvUTZ8LgB6ALEAoL4>'
print(get_url(raw_url))
 

Выведет

 https://app.rule.io/subscriber/optIn?token=3DeyJ0eXAiOiJKV1QiLCJhbG=ciOiJIUzI1NiJ9.eyJzdWIiOjEssswrgTA3OCwic3Vic2NyaWJlckZvcm0iOjExOTAsImlzcyI6=Imh0dHBzOi8vYawetgg1bGUuaW8iLCJpYXQiOjE2MjM1NzkwMDYsImV4cCI6MTYyNDE4MzgwNiw=ibmJmIjoxNjIzNTc5MDA2LCJqdGkiOiJEbHMyeDJmcG5pZEhTWXVjwjwje-52uhXlj9efaEwzfI=Rruoiqc3RvUTZ8LgB6ALEAoL4