任务:我需要匹配所有文件从temp
开始,并应结束.txt
从列表中。我已经尝试了这段代码,但它不工作。
import re
pattern = re.compile(r'^temp(?:_[\d]{2}[\W_])*(\d{4})?(?:[\W_][\d]{2}[\W_][\d]{2})?\.txt$')
file_names = [
'temp_2023_05_22.txt',
'temp.txt',
'temp_09_05_2022.txt',
'temp_22092023.txt'
]
matched_files = [file_name for file_name in file_names if pattern.match(file_name)]
print(matched_files)
Edited
也考虑这种情况
temp20230522.txt
4条答案
按热度按时间fzsnzjdm1#
查看您的模式和示例数据:
^
字符串开始temp
逐字匹配(?:
非夺获组_
逐字匹配(?:
备选项的非捕获组\d{4}_\d\d_\d\d
匹配4位数_
2位数_
2位数|
或\d\d(_?)\d\d\1\d{4}
匹配2个数字,捕获组1中的可选_
,2个数字,使用反向引用和4个数字匹配与组1中相同的字符)
关闭非捕获组)?
关闭非捕获组并将其设为可选$
字符串结束参见regex101 demo。
或者更广泛的匹配:
查看其他regex101 demo
kx5bkwkv2#
刚刚写了下面的简单正则表达式,它涵盖了所有情况下,你提到的,加上一些与字母数字名称有下划线:
输出:
kokeuurv3#
由于您有一个直接和简单的比较,这可能是更简单和更明显的没有正则表达式
不必要的外来变异
x一个一个一个一个x一个一个二个x
yfjy0ee74#
您正在使用的正则表达式模式似乎过于具体,可能不匹配所有以“temp”开头并以“.txt”结尾的文件名。