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

时间:2015-05-13 08:16:15

标签: python regex

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

$args = array(
    'theme_location' => 'main-menu',
    'container' => 'ul'
);

echo wp_nav_menu($args);

2 个答案:

答案 0 :(得分: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.

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

答案 1 :(得分:0)

您可以通过这种方式组合两个正则表达式。此示例是基于@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(n)方法在Match对象上获得每个匹配的片段。

此正则表达式假设每条路径的长度仅为2

(例如:'dir / subdir'而非'dir / subdir / subdir')

我希望这会有所帮助。