如果我要检查子目录是否可选,应该如何使用正则表达式?

时间:2019-01-31 08:02:46

标签: python regex

我希望type_dir是可选目录。

我使用搜索。可以吗? 我需要使用try ... except块吗?

import re
pattern = r'mydir/.*(\w*).*/\[{type_dir}\]/'.format(type_dir="")

例如,

type_dir = b
mydir/a/b/c - True
mydir/a/c - True

2 个答案:

答案 0 :(得分:0)

据我所知,您想使用正则表达式找到一种方法来检查某个目录是否存在,其中任何子目录都是可选的。

因此,我的回答是您不需要使用try... except,并且搜索非常好。一种更快的搜索方式是使用glob python模块,如下所示:

注意:mydir中的文件夹层次结构如下:

enter image description here

>>> import os
>>> from glob import glob
>>>
>>> type_dir = "b"
>>> print(glob(os.path.join("mydir", "**", type_dir), recursive=True))
['mydir/a/b']
>>>
>>> type_dir = "c"
>>> print(glob(os.path.join("mydir", "**", type_dir), recursive=True))
['mydir/a/c', 'mydir/a/b/c']
>>>
>>> type_dir = "d"
>>> print(glob(os.path.join("mydir", "**", type_dir), recursive=True))

答案 1 :(得分:0)

可选字符串表示该字符串匹配零或一次。 ?有一个符号,请参见RE syntax

re.fullmatch的RE字符串应为

/dir/(subdir/)?file

,并且将与/dir/subdir/file/dir/file匹配,并且没有其他内容。


为完整起见:所有可选子目录的基本RE为:

/dir/(.*/)?file

将直接在目录/dir/file或某个子目录/dir/sub/file中匹配文件,甚至在/dir/sub1/sub2/file的多个级别中也是如此。

如果仅要将可选子目录限制为一个级别,则:

/dir/([^/]*/)?file