试图找到某些文件夹模式。我可以有一个简单的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
。我想我需要提前进行邮政搜索,但不确定如何将其与可选的捕获组配合使用。
答案 0 :(得分:1)
尝试使用此版本:
pattern = re.match(".*name(_a[0-9]*)?$", dir)
我刚添加了$
来匹配第一个下划线之后的字符串结尾。我还添加了[0-9]*
以匹配零个或多个数字。
实时示例:
答案 1 :(得分:1)
最好的解决方案是首先从路径中提取文件名,因此您不必在正则表达式中处理它。 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)
请注意,您原始解决方案中发生的事情是.*
与整个字符串匹配,从而导致了意外的行为。