Регулярное выражение для извлечения доменного имени из правила Adblock

#regex #python-3.x

#регулярное выражение #python-3.x

Вопрос:

Я пытаюсь извлечь все домены из текстового файла и сохранить его в другой текстовый файл, но он отображает все доменные имена и другие вещи, а также возвращает:

 ads.css 

abc.js 

Kashi.png 
 

Мои входные строки:

 token$script,domain=liveresult.ru

euroiphone.eu##.div-download-h

||ausujet.com/skins/common/ads.js

@@||cyberdean.fr/js/advertisement.js

biggestplayer.me##.adblock   *

 hearthhead.com,wowhead.com##.block-bg

 wowhead.com##.block-bgimg

  euroiphone.eu##.div-download-h

  euroiphone.eu##.div-download-v

 findretros.com##.fuck-adblock

 @@||ausujet.com/skins/common/ads.js

 @@||cyberdean.fr/js/advertisement.js

 @@||dbz-fantasy.com/ads.css

 @@||dev-dyod.fr/styles/ads.css

  forums.ru###mdl_adb

  ostroh.info###modal.modal-bg

  7days2die.info###nafikblock

 all-episodes.net###odin
 

Существует множество правил, из которых я должен извлечь домен

Мой результат должен быть:

 liveresult.ru

cyberdean.fr

euroiphone.eu

ausujet.com

biggestplayer.me

hearthhead.com

 wowhead.com

 euroiphone.eu

  ausujet.com

  cyberdean.fr

 dbz-fantasy.com

 dev-dyod.frforums.ru

 7days2die.infoy 
 

Я пробовал:

 import re

   Domains = ['ru', 'fr' ,'eu', 'com']

 with open('easylist.txt', 'r') as f:

       a=f.read()

  result=re.findall(r'[a-zA-Z0-9-] .[a-zA-Z0-9-.] ',a)

  unique_result = list(set(result))

  for r in result:

     domain_name = r.split('.')[1]

     If  domain_name in domains:

      file_out.write(r /n)
 

Но для этого мне нужно составить список доменов, который является трудоемким процессом, я хочу создать некоторый шаблон, который автоматически извлекает домен, игнорируя такие вещи, как ads.js , ads.css , advertisement.js и т.д. , так что , пожалуйста , скажите мне , где я поступаю неправильно.

Комментарии:

1. Решение для этого с вашей стороны будет высоко оценено.

Ответ №1:

Если вы хотите напечатать все в новой строке, вам следует file_out.write(r 'n') записать каждую строку в новой строке, и вы можете удалить дубликаты, используя set

 import re

domains = ['ru', 'fr' ,'eu', 'com']
with open('easylist.txt', 'r') as f:
    a=f.read()
    result=re.findall(r'[a-zA-Z0-9-] .[a-zA-Z0-9-.] ',a)
    unique_result = list(set(result))
    for r in result:
        #Extract domain name out of url
        domain_name = r.split('.')[1]
        #Check if domain name is in list of domains, only then add it
        if domain_name in domains:
            file_out.write(r)
 

Комментарии:

1. а как насчет удаления дублирования?

2. Обновил мой ответ!

3. Отлично, пожалуйста, поддержите и примите мой ответ, чтобы помочь мне 🙂

4. В приведенном выше коде еще одна проблема, с которой я сталкиваюсь, заключается в том, что он также извлекает неверный вывод, как и возвращает ads.js , abc.php , kashi.png но я не хочу извлекать эти вещи, я хочу, чтобы мой код пропускал вещи после / обратной косой черты, он должен включать только доменное имя, какой шаблон я должен использовать?

5. Для этого вы можете проверить, присутствуют ли в строке известные доменные имена, например com , in , gov и т. Д.