gpt4 book ai didi

Python 正则表达式数字和下划线

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:14 24 4
gpt4 key购买 nike

我正在尝试从文件名遵循以下模式的目录中获取文件列表:

PREFIX_YYYY_MM_DD.dat

例如

FOO_2016_03_23.dat

似乎无法获得正确的正则表达式。我尝试了以下方法:

pattern = re.compile(r'(\d{4})_(\d{2})_(\d{2}).dat')
>>> []

pattern = re.compile(r'*(\d{4})_(\d{2})_(\d{2}).dat')
>>> sre_constants.error: nothing to repeat

正则表达式对我来说无疑是一个弱点。谁能解释我哪里出错了?

要获取文件,我正在做:

files = [f for f in os.listdir(directory) if pattern.match(f)] 

PS,我如何允许 .dat 和 .DAT(不区分大小写的文件扩展名)?

谢谢

最佳答案

你的表达有两个问题:re.compile(r'(\d{4})_(\d{2})_(\d{2}).dat')

第一个,正如前面的评论所述,. 就在 dat 之前,应该通过放置反斜杠 (\ ) 前。否则,python 会将其视为特殊字符,因为在正则表达式中 . 表示“任何字符”。

除此之外,您没有处理表达式中的大写异常。您应该为此创建一个组,将 datDAT 作为可能的选择。

完成这两项更改后,它应该看起来像:

re.compile(r'(\d{4})_(\d{2})_(\d{2})\.(?:dat|DAT)')

作为额外说明,我在组的开头添加了 ?:,因此正则表达式匹配器会在结果中忽略它。

关于Python 正则表达式数字和下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com