Python Glob正则表达式文件搜索,包含多个匹配的单个结果

时间:2017-09-22 19:20:19

标签: python regex glob

在Python中,我试图在目录中找到一个特定的文件,让我们说,' file3.txt'。目录中的其他文件包括' flie1.txt',' File2.txt',' file_12.txt'和' File13.txt&#39 ;。该号码是唯一的,因此我需要按用户提供的号码进行搜索。

file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + f'{file_num} + '.txt')

问题是,这会同时返回' file3.txt'和' File13.txt'。如果我尝试lookbehind,我没有文件:

file_num = 3
my_file = glob.glob('C:/Path_to_dir/' + r'[a-zA-Z_]*' + r'(?<![1-9]*)' + f'{file_num}' +  '.txt')

我如何获取&#39; file3.txt&#39;?

2 个答案:

答案 0 :(得分:2)

var sentenceDetector = new EnglishMaximumEntropySentenceDetector("OpenNLP/EnglishSD.nbin"); 接受Unix通配符,而不是正则表达式。那些功能不那么强大,但你所要求的仍然可以实现。这样:

glob

过滤包含3个没有数字的文件。

对于其他情况,您可以使用列表推导和正则表达式:

glob.glob("/path/to/file/*[!0-9]3.txt")

答案 1 :(得分:1)

glob的问题在于它的RegEx有限。例如,您不能将“{a-z _] +”与glob一起使用。

所以,最好编写自己的RegEx,如下所示:

import re
import os

file_num = 3
file_re = r"[a-z_]+{file_num}\.txt".format(file_num=file_num)
match_file = re.compile(file_re, flags=re.IGNORECASE).match

work_dir = "C:/Path_to_dir/"
names = list(filter(match_file, os.listdir(work_dir)))