我有以下使用RE的函数:
def friendSearch():
os.chdir("C:/Users/David/myFiles")
files = os.listdir(".")
for x in files:
inputFile = open(x, "r")
content = inputFile.read()
inputFile.close()
match = re.search(r'(?<="NAME":)("[^"]+")',content)
print (match)
当包含字符串的文件本身位于目录中时,它可以正常工作,但当其他文件添加到目录时,它不会返回任何内容。
这是因为“匹配”是与每个处理的文件一起写的吗?如果是这样我怎么能阻止这个?
提前致谢
答案 0 :(得分:3)
您是正确的,问题是match
被写入每个文件。我假设你想要一个包含每个文件中所有匹配项的列表,所以不要使用match = ...
使用matches.extend(...)
并在循环之前将matches
初始化为空列表。
例如:
def friendSearch():
matches = []
os.chdir("C:/Users/Luke/Desktop/Files")
files = os.listdir(".")
for x in files:
inputFile = open(x, "r")
try:
content = inputFile.read()
except UnicodeDecodeError:
continue
inputFile.close()
matches.extend(re.findall(r'(?<="text":)("[^"]+")',content))
print (matches)
答案 1 :(得分:0)
您的match
将仅包含最后一个文件的搜索结果。这一行:
match = re.findall(r'(?<="text":)("[^"]+")',content)
丢弃之前match
中的内容。试试这个:
match = []
for x in files:
inputFile = open (x, "r")
try:
content = inputFile.read()
except UnicodeDecodeError:
continue
inputFile.close ()
match = match + re.findall (r'(?<="text":)("[^"]+")', content)