2016-04-27 339 views
1

的一部分,我有一個字符串列表看起來像這樣:Matlab的 - 刪除字符串

/disk1/home/alb/main/directory1/image0001.png

我想在最後去除一切/和用一個看起來像這樣的字符串結束:

/disk1/home/alb/main/directory1/

有沒有快速的方法來做到這一點?

謝謝

+0

可能的[如何獲取文件名的路徑部分?]的副本(http://stackoverflow.com/questions/14476200/how-to-get-the-path-part-ofa-a-文件名) – excaza

回答

5

您將需要使用filepartsfirst output,因爲它可以保證在所有平臺上都能正常工作。 fileparts函數是一個內置的設計,用於將路徑分爲目錄,文件名和文件擴展名。

string = '/disk1/home/alb/main/directory1/image0001.png' 
part = fileparts(string); 

如果你真的需要一個斜槓(你不應該,如果你使用fullfile到(正確地)構造一個新的路徑),那麼你可以將其添加到使用filesep結束。

part_with_slash = [part, filesep]; 

如果由於某種原因,你正試圖處理Windows機器上這* nix的文件路徑(其中有一個不同的文件分隔符),只有,那麼你可以使用下面的regexp

part = regexp(string, '.*/', 'match'); 
+0

在回答時忘記了這個函數,刪除了我的答案,因爲這絕對是最好的解決方案。 +1平臺獨立性 – mgilbert

+0

有趣的事實:''fileparts'只是使用'find'來定位'/','''''和最後一個''的位置。「# – excaza

+1

@excaza並做好所有的檢查以確保兼容性與UNC路徑和情況下,你只傳遞它沒有主要目錄的文件名:) – Suever

1

您可以使用正則表達式:

str = "/path/to/file.png" 

regexprep(str,'([A-Za-z0-9]\.png)?','once') 

的?這使得它很懶,這是最短的可能。

+0

謝謝,這個作品真的很好,我給了我的例子。我的目錄名更復雜一些,我給了一個更簡單的版本來簡化它。我的字符串看起來像這樣:'/disk1/home/alb/main/directory1/direct1_subdir1_image0001.png'當我使用你的解決方案時,它刪除了PNG,但不是整個direct1_subdir1_imag0001。任何想法如何解決這個問題? –

+0

@ALB這個正則表達式應該可以工作:''\\(?= [。] * $)'' –