正则表达式先匹配目录,然后匹配子目录

2024-06-30 17:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,如果我有一个路径列表(例如dir1/subdirA、dir2/subdirB、dir1/subdirB等)。我有一个正则表达式来匹配一些目录名,然后另一个正则表达式来匹配子目录。获取有效路径的最佳方法是什么。或者有没有办法使用现有的2个正则表达式组合这两个正则表达式?在

DIR_RE = re.compile(r'somedirname', re.I)

SUB_RE = re.compile(r'^/somesubdir$', re.I)

Tags: 方法路径re列表dircompilesub办法
2条回答
import re

directories = ["dir1/subdirA", "dir2/subdirB", "dir1/subdirB", "subdir9/dirC"]

expression = re.compile('^dir[1-9]\/subdir[A-Z]$', re.I)

for directory in directories:
    if (re.match(expression, directory)):
        print "Yes the directory path :" +directory+ "  is valid"
        #Do something.
        #Passed cases = ["dir1/subdirA", "dir2/subdirB", "dir1/subdirB"]
    else:
        #Failed cases = ["subdir9/dirC"]
        #Do something here.

注意:创建正则表达式时要记住提供的示例,如果目录结构不同,则必须相应地更改它。在

您可以用这种方式组合两个regexp。这个例子是基于@ZdaR提出的解决方案的一个替代方案。在

import re
directories = ["dir1/subdirA", "dir2/subdirB", "dir1/subdirB", "subdir9/dirC"]

regexp = re.compile('^(dir[1-9])\/(subdir[A-Z])$', re.I)

for path in directories:
    frag = regexp.match(path)
    if frag != None:
        dir_str = frag.group(1)
        subdir_str = frag.group(2)
        entire_match = frag.group(0)
        # Do something with them

请注意regexp中的括号。这些括号允许在regexp中定义几个组,因此可以在match对象上使用group(n)方法获得每个匹配的片段。在

此regexp假定每个路径的长度仅为2

(例如:“dir/subdir”而不是“dir/subdir/subdir”)

我希望这会有帮助。在

相关问题 更多 >