2014-07-24 30 views
3

的端部突出我有一個字符串數組刪除在串Matlab的

Str_in = {'ab_cd_a9_b5__','ab_cd_r_','ef_g','3swe_4r_2345___','swe','eds______'}; 

後行上面的字符串數組中如何刪除下劃線。每個字符串的長度不是恆定的,下劃線的數量可能會有所不同。期望的輸出字符串是

Str_out = {'abcda9_b5','ab_cd_r','ef_g','3swe_4r_2345','swe','eds'}; 

有沒有人可以幫助解決這個問題?

+2

如果你總是期望字符串的第一部分具有相同的長度,您可以簡單地取這些字符。例如,'Str_out = cellfun(@(x)x(1:5),Str_in,'UniformOutput',false)' – Cecilia

+0

是下劃線的數量可能會有所不同。請檢查編輯的問題 – nik

回答

4

使用正則表達式替換這些字符很方便。尾隨的格局_是(數 '_' 是大於或等於1):

_+$ 

因此,代碼爲:

Str_in = {'ab_cd_a9_b5__','ab_cd_r_','ef_g','3swe_4r_2345___','swe','eds______'};  

Str_out = cellfun(@(x) regexprep(x, '_+$', ''), Str_in, 'UniformOutput', false); 

% or do as Shai mentioned, 
Str_out = regexprep(Str_in, '_+$', ''); 

disp(Str_out); 

輸出:

'ab_cd_a9_b5' 'ab_cd_r' 'ef_g' '3swe_4r_2345' 'swe' 'eds' 
+3

'regexprep'可以將一個字符串數組作爲輸入。這裏不需要'cellfun':'Str_out = regexprep(Str_in,'_ + $','')'將會做到這一點。 – Shai

+0

謝謝你的回答 – nik