文件内容和计数出现次数的匹配模式

时间:2019-04-06 15:40:16

标签: python regex python-3.x

我正在尝试读取文件的内容,并使用正则表达式检查是否匹配模式列表。

文件内容:

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 个答案:

答案 0 :(得分:1)

每次调用data.read()时,它都会从文件中最后一次调用结束的位置开始读取。由于第一个调用读取了整个文件(因为您未指定限制),因此所有其余的调用都从文件末尾开始读取,因此它们什么也不会读取。

您应该将文件读入一个变量,然后使用该变量而不是重复调用data.read()

您还需要使用re.search(),而不是re.match()。参见What is the difference between re.search and 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")