例如,如果我有一個路徑列表(即.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