正则表达式 python - 捕捉文件名

2024-03-29 15:37:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图搜索一个特定的模式来只抓取那些与给定文件夹中的模式对齐的文件。 我需要一些帮助来开发一个匹配两个模式的正则表达式-我似乎找不到一个同时匹配这两个模式的正则表达式。 这是我使用的原始正则表达式:

r"^([a-zA-Z]+)__?(\d+).(\d+).(\d+)\.xlsx"

之所以采用这种搜索模式,是因为我然后将文件名、日期(dd-mm-yy)和完整文件名提取为五个变量,这样就可以提取包含在完整文件名中的日期,即文件的输入日期。在

^{pr2}$

现在我尝试以下方法:

files = []
for f in os.listdir(drive):
    match = re.search(r"^([a-zA-Z-]+)__?(\d+).(\d+).(\d+).xlsx$",f)
    if match:
        files.append(match.groups() + (f,))

示例文件名:

filename_19.01.17.xlsx
filename__04.01.17.xlsx
AB_TEST_DATA-OUTER_13.02.17.xlsx

因此,提取应如下所示:

filename, 19, 01, 17, filename_19.01.17.xlsx

还尝试了以下方法:

r"^(([a-zA-Z-]+)(__?)){1,3}(\d+).(\d+).(\d+).xlsx"

有可能有一个模式来匹配两个文件吗?还是我应该把它们分成两种模式?在


Tags: 文件方法文件夹for文件名match模式files
2条回答

你可以选择:

^.+__?(\d{2})\.(\d{2})\.(\d{2})\.xlsx$

分解这意味着:

^{pr2}$

a demo on regex101.com。另外,看看^{}。在

这里的模式似乎是:

首先是一些字母表,然后是一个或多个分数不足,a日期的格式是xx.xx.xx以及结尾的.xlsx格式,可以将其转换为regex:

\S+_+(\d+.){3}\.xlsx

Break-Up:

\S+ - matches any non-whitespace character, one or multiple times.

_+ - matches under-score character one or multiple times.

(\d+.){3} - Number in format of xx.xx.xx.

.xlsx - matches the extension of file.

相关问题 更多 >