這裏提供的解決方案可能是100%可靠的,除非您知道您的數據格式正確(路徑字符串已被轉義?)。這個問題歸結爲找到一個文本行中有效的路徑。這並不容易。我們假定所有文件都有文件擴展名(這在路徑的上下文中不一定是這樣)。然後任意路徑可以看起來像以下任何一種:
'wwwww.x'
'wwwww.xyz'
'\wwwww.xyz'
'ccccc\wwwww.xyz'
'\ccccc\wwwww.xyz'
...
str = 'The quick brown fox aaaa\bbbbb\ccccc\wwwww.xyz jumped over the lazy dog.';
matches = regexp(str,'\s\\?([^.\s\\]+\\)*([^.\s]+\.\w+)\s','tokens');
file_name = matches{1}(2)
返回(所有的擴展上面的情況是,雖然第一種情況略有不同)
file_name =
'wwwww.xyz'
如果你知道文件擴展名是'.xyz'
,那麼你可以使用它代替:
matches = regexp(str,'\s\\?([^.\s\\]+\\)*([^.\s]+\.xyz)\s','tokens');
順便說一句,對於一個路徑,該fileparts
功能,可用於:
str = 'aaaa\bbbbb\ccccc\wwwww.xyz'; % A Windows-only path
% str = 'aaaa/bbbbb/ccccc/wwwww.xyz'; % A UNiX or OS X path (works on Windows too)
[path_str,file_name,file_ext] = fileparts(str)
返回
path_str =
aaaa\bbbbb\ccccc
file_name =
wwwww
file_ext =
.xyz
然後,您可以通過
file_name_ext = [file_name file_ext];
說明,對path_str
省略尾隨文件分隔符獲得與擴展名。
是您'line'實際的路徑?有專門的功能,應該使用,而不是訴諸慢'regexp'(尤其是因爲像文件分隔符的東西是平臺相關的)。 – horchler
是線路實際上是路徑。但我的實際路線不僅是路徑。爲了簡化我的問題,我只採用了路線。我真正的線路就像AAAA BBBBB ..... aaaa \ bbbbb \ ccccc .... \ wwwww.xyz DDDD ... – user2990048
你知道每條線路是否有路徑嗎?一行中是否可以有多條路徑(或沒有路徑)? 「在特定詞語之間用詞」是什麼意思?這是否意味着你知道路徑之前或之後的單詞「BBBBB」和「DDDD」是什麼? – horchler