2013-08-05 68 views
1

我有以下輸入列表,我想從中提取目錄路徑並忽略文件路徑。下面是輸入列表分隔的例子;正則表達式匹配目錄路徑並忽略文件路徑

MI4/Search/Service/src/main/resources/META-INF/persistence.xml;MI4/Search/Service/src/main/resources/META-INF;MI4/FRSearch/Service/src/main/resources/resource/spring.xml;MI4/Search/Service/src/main/resources/conf; 

正則表達式應該匹配

MI4/Search/Service/src/main/resources/META-INF; 
MI4/Search/Service/src/main/resources/conf; 
+1

有可能有更好的方法來做到這一點。你在使用什麼平臺? Java的? 。淨? –

+3

您使用的是哪種正則表達式引擎或語言?你到目前爲止嘗試過什麼? –

+0

上面的列表我從SVN diff得到。我正在加載它以使用ant在標籤之間創建補丁。 –

回答

0

首先,目錄可以與擴展來命名,所以檢查的路徑延伸的存在或不存在是不是做這個的可靠方法以確定是否真的是文件或目錄。實際上,確定路徑是目錄還是文件名的唯一方法是使用相應的OS API,例如,在Windows上爲GetFileAttributes或在Linux上爲stat

如果這是您的要求,那麼您應該在分號上進行分割並遍歷每個結果路徑,將每個路徑反饋到合適的API以確定它是否是文件或目錄。如果文本匹配是你所需要的,我仍然建議你用分號分割,然後根據適當的正則表達式匹配每條單獨的路徑。

Ruby的功能,將提取的擴展可能如下所示:

def get_extension(path) 
    path =~ /[^\/](\.[^.\/]*)$/ 
    $1 
end 

注意,有你需要處理的幾個問題。例如,此正則表達式將把路徑foo/bar/.hidden視爲路徑,而不是的擴展。這可能不完全是你需要的行爲。你需要適當調整表情。

然後,您將獲得get_extension返回nil的所有路徑。請讓我們知道您嘗試使用哪種語言,因爲它們存在顯着的語法差異。

相關問題