0

我有以下使用 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)

当包含字符串的文件单独位于目录中时,它可以正常工作,但是当将其他文件添加到目录时,它不会返回任何内容。

这是因为每个处理的文件都覆盖了“匹配”吗?如果是这样,我该如何阻止呢?

提前致谢

4

2 回答 2

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)
于 2013-02-27T19:37:58.783 回答
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)
于 2013-02-27T19:37:02.717 回答