我在MATLAB中有以下字符串,例如
@ # % % F1_USA (40) _u
和
F1_USA_40__u
有这个功能吗?
您最好的选择可能是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_]', '_'), '^_*', '')
这样做的一种方法是使用函数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
如果你想使用正则表达式(这可能会变得更复杂),那么Tamas的最后一个建议将起作用。然而,它可以大大简化为以下内容:
str = regexprep(str,{'W','^_*'},{'_',''});