登录论坛

查看完整版本 : 如何格式化字符串以用作MATLAB中的结构字段名称?


poster
2019-12-10, 20:48
我要删除连字符( - ),斜杠( / )和空格( )从字符串name(i)删除,以便我可以将其用作结构字段名称。

这是我目前使用功能strrep (http://www.mathworks.com/help/techdoc/ref/strrep.html)的丑陋方式:

cell2mat(strrep(strrep(strrep(name(i), '-',''),'/',''),' ', '')) 我还尝试了其他变体,例如:

strrep(name(i),{'-','/'},{'',''}); strrep(name(i),['-','/'],['','']); 什么是更有效的方法?



回答:

注意:我猜您的变量name是一个字符串单元格数组,在这种情况下,您将要使用{} (即内容索引 (http://www.mathworks.com/help/techdoc/matlab_prog/br04bw6-98.html#br04bw6-108) )而不是() (即单元索引 (http://www.mathworks.com/help/techdoc/matlab_prog/br04bw6-98.html#br04bw6-108) )从中获取字符串...

与MATLAB中的许多问题一样,有多种方法可以解决此问题。


选项1:您可以使用函数REGEXPREP (http://www.mathworks.com/help/techdoc/ref/regexprep.html) 。以下内容删除连字符,正斜杠和空格:

newName = regexprep(name{i},'[-/\s]',''); 这样做的好处是\s将匹配并替换所有空格字符,其中包括普通空格(ASCII代码32)以及制表符,换行符等。

为了安全起见,请删除MATLAB变量/字段名称 (http://www.mathworks.com/help/techdoc/ref/isvarname.html)中所有无效的字符,可以将以上内容简化为:

newName = regexprep(name{i},'\W','');
选项2:如果您不必担心删除列出的3个字符以外的任何其他字符,则可以使用ISMEMBER (http://www.mathworks.com/help/techdoc/ref/ismember.html)函数, 如下 (http://www.mathworks.com/help/techdoc/ref/ismember.html)所示:

newName = name{i}; newName(ismember(newName,'-/ ')) = [];
选项3:如果只想保留字母数字字符的所有内容并转储其余字符(连字符,空格,下划线等),则可以使用函数ISSTRPROP (http://www.mathworks.com/help/techdoc/ref/isstrprop.html) :

newName = name{i}; newName = newName(isstrprop(newName,'alphanum'));

更多&回答... (https://stackoverflow.com/questions/4197729)