Python:正则表达式仅适用于包含1个文件的目录

时间:2013-02-27 19:34:47

标签: python regex

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

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

这是因为“匹配”是与每个处理的文件一起写的吗?如果是这样我怎么能阻止这个?

提前致谢

2 个答案:

答案 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)