2011-04-28 80 views
2

我在MATLAB下面的字符串,例如工作串在MATLAB

@#%% F1_USA(40)_U

,我想

F1_USA_40__u

它有這個功能嗎?

+0

你究竟想要什麼?去除所有非字母數字字符,但應該用下劃線替換的括號除外? – 2011-04-28 09:48:28

+0

從該單詞的開頭我想刪除非字母數字字符,並且用'_'替換字詞 – 2011-04-28 09:50:34

回答

2

你最好的選擇可能是regexprep,它允許你使用正則表達式替換字符串的部分:

s_new = regexprep(regexprep(s, '[()]', '_'), '[^A-Za-z0-9_]', '') 

更新:根據更新後的評論,這可能是你想要的東西:

s_new = regexprep(regexprep(s, '^[^A-Za-z0-9_]*', ''), '[^A-Za-z0-9_]', '') 

或:

s_new = regexprep(regexprep(s, '[^A-Za-z0-9_]', '_'), '^_*', '') 
+0

更新的第一個解決方案中存在拼寫錯誤。最後你應該有一個''_''而不是''''。此外,使用[表達式和替換字符串的單元格數組輸入](http://www.mathworks.com/help/techdoc/ref/regexprep.html#f76-1152246)將允許您對REGEXPREP進行一次調用。 – gnovice 2011-04-28 16:31:49

+0

第一個解決方案是指當OP不清楚OP需要什麼時的階段 - 我假定他想用下劃線替換括號,然後去除不是字母數字或下劃線的所有內容。此外,感謝您的鏈接,我不知道這一點。很有用! – 2011-04-28 17:29:26

1

一種方式做,這是使用功能ISSTRPROP發現的字母數字字符的指數,更換或相應地刪除其他:

>> str = '@#%%F1_USA(40)_u';   %# Sample string 
>> index = isstrprop(str,'alphanum'); %# Find indices of alphanumeric characters 
>> str(~index) = '_';     %# Set non-alphanumeric characters to '_' 
>> str = str(find(index,1):end)  %# Remove any leading '_' 

str = 

F1_USA_40__u       %# Result 

如果你想使用regular expressions(可以得到一個更復雜一點),那麼the last suggestion from Tamas將工作。但是,它可以大大簡化爲以下內容:

str = regexprep(str,{'\W','^_*'},{'_',''});