регулярное выражение для извлечения определенного шаблона - PullRequest
0 голосов
/ 23 марта 2019

Мне нужно извлечь конкретное правило из списка фильтров, в котором указано количество правил для этой категории.

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

"/example.com $ script, domain = example.com"

и второе правило исключения -

"@@ / example.com $ script, domain = example.com"

третье правило с привязкой к домену:

"|| example.com

, тогда как четвертое правило с тегом привязки и домена -

"|| jizz.best ^ $ всплывающее окно, домен = vivo.sx

и пятый

"@@ || pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=quebeccoupongratuit.com

6-й с ограничением домена выглядит следующим образом

"example.com ### examplebanner

7-й без ограничения домена

"### examplebanner

8-й является исключительным с сокрытием элемента

example.com#@##examplebanner

Это разные категории правил, которые я должен получить отдельно

a=open('1-19-16anti-adblock-killer-filters.txt','r')
text=a.read()
 line_starts_with_2pipes_no_domain = 0
  line_starts_with_2pipes_with_domain = 0
 line_starts_with_2ats_with_domain = 0
 line_with_domain = 0

 for line in text.split("\n"): 
   if line.startswith("||"):
    if ",domain" in line: 
        line_starts_with_2pipes_with_domain += 1
    else:
        line_starts_with_2pipes_no_domain += 1
  elif line.startswith("@@") and ",domain" in line:
    line_starts_with_2ats_with_domain += 1
   elif ",domain" in line: 
    line_with_domain += 1
   elif line.strip(): 
      print(f"No idea what to do with :{line}")

print("2pipes_no_group", line_starts_with_2pipes_no_domain ) 
print("2pipes_with_group", line_starts_with_2pipes_with_domain ) 
 print("2@_with_group", line_starts_with_2ats_with_domain ) 
 print("line_with_domain", line_with_domain)

Сейчас я пытаюсь получить 5-е, 6-е, 7-е и 8-е правило. Ваш ответ будет оценен, спасибо.

1 Ответ

1 голос
/ 23 марта 2019

Ваше регулярное выражение не соответствует , перед доменом:

"\/[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+domain="
#                  ^^^^^^^^^^^^ no , allowed

Вы также можете упростить это:

with open("easylist.txt") as f: 
    print('There are total Rule With Domain tag are =', f.read().count(",domain="))

должен дать вам ответ о том, как часто ',domain=' происходит. Если ваш файл большой, вы также можете сосчитать:

domain_rule_count = 0
with open("easylist.txt") as f:
    for line in f:
        domain_rule_count += 1 if ",domain=" in line else 0

Изменить после вопроса в комментарии: Вы просто проверяете, что вы хотите:

text = """ some text
/example.com $script,domain=example.com
@@/example.com $script,domain=example.com 
||example.com
||jizz.best^$popup,domain=vivo.sx
"""

line_starts_with_2pipes_no_domain = 0
line_starts_with_2pipes_with_domain = 0
line_starts_with_2ats_with_domain = 0
line_with_domain = 0

for line in text.split("\n"): 
    if line.startswith("||"):
        if ",domain" in line: 
            line_starts_with_2pipes_with_domain += 1
        else:
            line_starts_with_2pipes_no_domain += 1
    elif line.startswith("@@") and ",domain" in line:
        line_starts_with_2ats_with_domain += 1
    elif ",domain" in line: 
        line_with_domain += 1
    elif line.strip(): 
        print(f"No idea what to do with '{line}'")

print("2pipes_no_group", line_starts_with_2pipes_no_domain ) 
print("2pipes_with_group", line_starts_with_2pipes_with_domain ) 
print("2@_with_group", line_starts_with_2ats_with_domain ) 
print("line_with_domain", line_with_domain)

Выход:

No idea what to do with ' some text'
2pipes_no_group 1
2pipes_with_group 1
2@_with_group 1
line_with_domain 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...