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

标签 python regex performance

我有一个来自 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 - 即当您从行首搜索时.

关于python - 带列表的高效正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50674757/

相关文章:

python - 使用 SSL 支持编译 Python 时出错

asp.net - 使用 ASN.NET 了解 SQL 中应用程序角色的性能影响

c++ - 检查 char 数组中前导字符的最快方法是什么?

java - Java编译器是否优化常量变量计算?

python - 使用预定义验证集 Sklearn 执行网格搜索

python - Mac OS X Lion 上的 Virtualenvwrapper 错误

python - 使用 matplotlib.animation 从 matplotlib 制作视频后创建的空 .mp4 文件

python - 如何从 txt 文件创建矩阵/数组?

c# - 提取引号之间的单词并将值存储在变量中

python - 为什么在 python 中没有使用指定的正则表达式找到它?