首页 > 解决方案 > 不区分大小写的文件名模式匹配返回无

问题描述

更新:如何从 python 中的正则表达式匹配中返回一个字符串?- 这个问题看起来很相似,我已经相应地更新了。


我试图打开一个文件来写入它,但是我不知道它的大小写,所以我试图不区分大小写地匹配其路径中的文件名。

目前,使用print(my_file),我看到了folder_path但是,file_match返回 None 中的所有文件。我也尝试了 re.search 而不是 re.match 并且它也返回 None 。

import re
from pathlib import Path as p
cwd = p.cwd()

folder_path = p(cwd / 'somefolder')

for my_file in folder_path.iterdir():
    print(my_file)
    file_match = re.search('.+/test.txt', str(my_file), re.IGNORECASE)
    print(file_match) # Gives me <re.Match object; span=(0, 97), match='/the/path>

print(file_match) # gives me None

我希望匹配以下之一:

但不是这个:

最终,我想要一个包含 /cwd/somefolder/test.txt 路径的变量,只要它恰好存在于其中。这样我就可以打开并写入所述文件。

这是我正在使用的正则表达式,它似乎正在工作: https ://regex101.com/r/hz5qNe/2

注意:我正在搜索的每个文件夹中只有一个 test.txt 但是,我不知道它的大小写,即文件名总是相同的,但是大小写可能会有所不同,具体取决于当前的 folder_path 迭代(我是循环查找每个文件夹的 test.txt 路径,但没有将其包含在上述代码中,以便将其简化为最简单的形式。)

任何帮助将不胜感激,谢谢!

标签: pythonregexpath

解决方案


我建议放弃re并使用以下测试:

if my_file.name.lower() == 'test.txt':
    ...

这应该使代码也更容易理解和维护。

如果您随后需要访问文件夹名称,则可以使用该my_file.parent属性。


推荐阅读