2014-01-29 53 views
0

我想在Matlab正則表達式中的特定單詞之間找詞。Matlab正則表達式;我想在特定的單詞之間寫詞

例如,如果line ='aaaa \ bbbbb \ ccccc .... \ wwwww.xyz'被給出, 我想只捕獲wwwww.xyz。

AAAA〜wwwww.xyz不代表特定的詞和的character-數這意味着它們可以是任何字符不含反斜槓和字符可以是大於1的wwwww.xyz數量總是最後一個反斜槓後。我的問題是正則表達式(line,'\\。+ \。xyz','match')並不總是有效,因爲wwwww有時包含特殊字符,如' - '。

任何建議表示讚賞。

+1

是您'line'實際的路徑?有專門的功能,應該使用,而不是訴諸慢'regexp'(尤其是因爲像文件分隔符的東西是平臺相關的)。 – horchler

+0

是線路實際上是路徑。但我的實際路線不僅是路徑。爲了簡化我的問題,我只採用了路線。我真正的線路就像AAAA BBBBB ..... aaaa \ bbbbb \ ccccc .... \ wwwww.xyz DDDD ... – user2990048

+0

你知道每條線路是否有路徑嗎?一行中是否可以有多條路徑(或沒有路徑)? 「在特定詞語之間用詞」是什麼意思?這是否意味着你知道路徑之前或之後的單詞「BBBBB」和「DDDD」是什麼? – horchler

回答

1

如果必須使用正則表達式這個,這個正則表達式應該工作:

[\\]?(?!.+\\)([^.]+\.[a-z]{3}) 

工作正則表達式的例子:

http://regex101.com/r/fL5oS5

示例數據:

aaaa\bbbbb\ccccc\ww%20-www.xyz 
www-654_33.xyz 

匹配:

1. ww%20-www.xyz 
2. www-654_33.xyz 
+0

工作!謝謝 ! – user2990048

+0

@ user2990048 - 太好了!那麼,如果這是有用的,那麼請upvote或選擇它作爲答案或兩者。謝謝。 :) – MElliott

+0

這假設文件上有一個三字母擴展名。這似乎是一個不必要的限制。 – Floris

0

這裏提供的解決方案可能是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省略尾隨文件分隔符獲得與擴展名。

0

假設你的字符串有唯一的共同點是,有一個文件路徑分隔符,你有興趣的一切「從最後一個文件路徑分隔符的第一個空格」,那麼你可以嘗試

['[\' filesep ']([^\' filesep ']+?)(?:\s|$)'] 

其在Windows平臺將減少到

\\([^\\]+?)(?:\s|$) 

演示:

http://regex101.com/r/jW5tT1

如果你想擴展字面匹配(在你的榜樣.xyz),將其更改爲

\\([^\\]+?\.xyz)(?:\s|$) 

「查找反斜線後面的最少(+?)號‘沒有反斜槓’,直到文字.xyz其次用空格或端線的」

enter image description here

相關問題