例如,如果我有一个路径列表(即.dir1/subdirA,dir2/subdirB,dir1/subdirB等)。我有一个正则表达式来匹配一些目录名称,然后是另一个正则表达式来匹配子目录。获得有效路径的最佳方式是什么?或者有没有办法使用2个现有的正则表达式来组合这两个正则表达式?正则表达式匹配目录然后匹配子目录
DIR_RE = re.compile(r'somedirname', re.I)
SUB_RE = re.compile(r'^/somesubdir$', re.I)
例如,如果我有一个路径列表(即.dir1/subdirA,dir2/subdirB,dir1/subdirB等)。我有一个正则表达式来匹配一些目录名称,然后是另一个正则表达式来匹配子目录。获得有效路径的最佳方式是什么?或者有没有办法使用2个现有的正则表达式来组合这两个正则表达式?正则表达式匹配目录然后匹配子目录
DIR_RE = re.compile(r'somedirname', re.I)
SUB_RE = re.compile(r'^/somesubdir$', re.I)
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.
注:创建正则表达式牢记的情况下,提供的示例目录结构是不同的,你必须相应地改变它。
这是非常有用的,但不是我所期待的。如果我有DIR_RE = re.compile(r'dir [1-9]',re.I)和SUB_RE = re.compile(r'subdir [AZ]',re.I),是否有将这两个现有的正则表达式? – user2378481
我经常使用re.compile(),但我不知道它接受了第二个参数。它是为了什么? – SebasSBM
我明白了。适用于不区分大小写的正则表达式。我在这里看到https://docs.python.org/2/library/re.html#re.compile – SebasSBM
你可以用这种方式组合这两个正则表达式。这个例子是基于@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
注意正则表达式中的括号。这些括号允许在正则表达式中定义几个组,因此每个匹配的片段可以使用group(n)方法通过Match对象获得。
这个规则表达式假定每个路径的长度将只有2
(如:“DIR /子目录”而不是“目录/子目录/子目录”)
我希望这将有助于。
您需要提供正在使用的正则表达式以及您希望匹配/丢弃的一些示例数据。由于这个问题非常广泛。 – npinti
简单地连接它们''somedirname \/somesubdir'',然后将这个正则表达式应用于整个列表到目录路径。 – ZdaR
在一般情况下,您应该更喜欢[glob](https://docs.python.org/2/library/glob.html)。但你应该提供更多的细节。 – alain