正在尝试查找特定的文件夹模式。我可以有一个简单的if语句,但现在我想知道,这可以在一个正则模式中完成吗?
文件夹:
name
name_a01
name_a02
..
name_a20
name_dontuse_a10
<不需要此模式
pattern = re.match(".*name(_a[0-9])?", dir)
上面的代码正确匹配,但它同时匹配name
和name_dontuse_a10
pattern.group(1)
为这两个文件夹返回None
,所以这对我没有太大帮助。
我不能预测什么不需要的文件夹将被命名,但我想要基本名称的文件夹和任何name_a## folder
。我认为我需要一个积极的前瞻,但不确定如何在可选的捕获组中使用它。
发布于 2018-10-24 01:53:50
试着使用这个:
pattern = re.match(".*name(_a[0-9]*)?$", dir)
我只是添加了$
以匹配字符串末尾的第一个下划线。我还添加了[0-9]*
来匹配零个或多个数字。
现场示例:
发布于 2018-10-24 02:07:13
最好的解决方案是首先从路径中提取文件名,这样就不必在正则表达式中处理它。normpath
删除所有尾随的/
,basename
提取文件名。因此,对于dir1/dir2/name/
,您将获得name
。
import os, re
dir = ...
name = os.path.basename(os.path.normpath(dir))
pattern = re.match("name(_a\d+)?", name)
请注意,在您的原始解决方案中发生的情况是,.*
匹配整个字符串,从而导致意外行为。
https://stackoverflow.com/questions/52955006
复制相似问题