Skip to main content
 首页 » 编程设计

python之带列表的高效正则表达式

2025年05月04日24虾米姐

我有一个来自 os.listdir() 的字符串列表,如下所示:

['foo', 
 'bar' 
 'backup_20180406' 
 ...] 

在这些条目中,我想获得与 "backup_YYYYMMDD" 模式匹配的条目。带有命名组的正则表达式将是

regex = r"BACKUP_(?P<date>\d+)" 

我正在尝试创建一个包含上述日期(又名.group('date'))的列表,但我找不到方法在不解析字符串两次的情况下执行此操作..

res = [re.search(regex, x).group('date') for x in filter(r.match, os.listdir(folder))] 

我确信我在这里遗漏了一些非常明显和简洁的东西,那么有更好的方法吗?

请您参考如下方法:

我通常这样做:

regex = re.compile(r"BACKUP_(?P<date>\d+)") 
a = ['foo', "BACKUP_20180406", 'xxx'] 
matches = [regex.match(x) for x in a] 
valid = [x.group('date') for x in matches if x] 

或者只是

valid = [x.group('date') for x in (regex.match(y) for y in a) if x] 

另请注意,regex.match 在适用时比 regex.search 快 - 即当您从行首搜索时.