我正在尝试读取文件的内容,并使用正则表达式检查是否匹配模式列表。
文件内容:
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
无法弄清这里出了什么问题。
答案 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")