使用文件的多个匹配开头

时间:2015-12-17 01:55:35

标签: python regex

我有一个程序,它输入一个数字列表(逗号分隔),我应该运行以这些数字开头的文件

myprogram.py 1,6,8 

必须浏览1001_filename, 1004_filename, 6001_filename, 8003_filename, 8004_filename等文件,

一种方法是迭代3次(一次为1 *,6 *,8 *)并且如果

for file_type in file_types:
    file.startswith(file_type): 

但如何匹配列表中的任何内容?

是否有正则表达式可以执行以下操作:

这里的

file.startswith(any of file_types): file_types是1,6,8还是其他什么?

4 个答案:

答案 0 :(得分:4)

您可以使用glob查找所有文件:

from glob import glob
path = "path_to/"
files = glob(path+"[1,5,8]*")

我们会在1指向的任何目录中匹配以58path开头的任何文件。

答案 1 :(得分:2)

你不需要这里的正则表达式。我建议在迭代文件时使用普通str.startswith with a tuple of accepted prefixes(自Python 2.5以来接受tuple prefix。这是一个小型演示:

>>> start_list = ('1', '6', '8')
>>> file_list = ['1001_filename', '1004_filename', '0000_filename']
>>> for filename in file_list:
...     if filename.startswith(start_list):
...         print(filename)
... 
1001_filename
1004_filename

答案 2 :(得分:1)

为了记录我同意这不是一个正则表达式必要的问题,但我确实喜欢正则表达式,所以这里是如何使用正则表达式

from re import findall, escape

start_list = ['1', '6', '8']
file_list = ['1001_filename', '1004_filename', '0000_filename']

print findall(r'^(%s)' % escape('|'.join(start_list)), file_list)
超过顶部的方式,不应该真正格式化正则表达式,除非非常明确地这样做,所有回答都是错误的。我只是喜欢正则表达式

编辑:在re.escape中添加,以免遇到太多问题

答案 3 :(得分:1)

您可以根据timgeb的答案使用列表理解。

{{1}}