Сопоставление шаблона с содержимым файла и количеством вхождений - PullRequest
0 голосов
/ 06 апреля 2019

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

Содержимое файла:

google.com
https://google.com
yahoo.com
www.yahoo.com
yahoo

Мой код:

import re
file = 'data_files/test_files/content.txt'

regex_1 = re.compile("google")
regex_2 = re.compile("yahoo")

data = open(file, 'r')

print ("Checking Regex 1")
if regex_1.match(data.read()):
    count_c = len(regex_1.findall(data.read()))
    print ("Matched Regex 1 - " + str(count_c))
print("Checking Regex 2")

if regex_2.match(data.read()):
    count_d = len(regex_2.findall(data.read()))
    print("Matched Regex 2 -  " + str(count_d))
else:
    print ("No match found")

Выход:

Checking Regex 1
Checking Regex 2
No match found

Не могу понять, что здесь не так.

1 Ответ

1 голос
/ 06 апреля 2019

Каждый раз, когда вы звоните data.read(), он начинает читать с того места в файле, где завершился последний вызов. Поскольку первый вызов читает весь файл (так как вы не указали ограничение), все остальные вызовы начинают чтение с конца файла, поэтому они ничего не читают.

Вы должны прочитать файл в переменную, а затем использовать его вместо многократного вызова data.read().

Вам также нужно использовать re.search(), а не re.match(). См. В чем разница между re.search и re.match?

import re
file = 'data_files/test_files/content.txt'

regex_1 = re.compile("google")
regex_2 = re.compile("yahoo")

with open(file, 'r') as data:

print ("Checking Regex 1")
if regex_1.search(contents):
    count_c = len(regex_1.findall(contents))
    print ("Matched Regex 1 - " + str(count_c))

print("Checking Regex 2")
if regex_2.search(contents):
    count_d = len(regex_2.findall(contents))
    print("Matched Regex 2 -  " + str(count_d))
else:
    print ("No match found")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...