Elp*_*rto 9 string matlab field matlab-struct
我想从字符串中删除连字符(-
),斜杠(/
)和空格() from a string
name(i)
以便我可以将其用作结构字段名称.
这是我目前正在使用该功能的丑陋方式strrep
:
cell2mat(strrep(strrep(strrep(name(i), '-',''),'/',''),' ', ''))
Run Code Online (Sandbox Code Playgroud)
我也尝试了其他变体,例如:
strrep(name(i),{'-','/'},{'',''});
strrep(name(i),['-','/'],['','']);
Run Code Online (Sandbox Code Playgroud)
什么是更有效的方法呢?
gno*_*ice 10
注意:我猜你的变量name
是一个字符串的单元格数组,在这种情况下你会想要使用{}
(即内容索引)而不是()
(即单元格索引)从中获取字符串...
与MATLAB中的许多问题一样,有许多不同的方法可以解决这个问题......
选项1:您可以使用函数REGEXPREP.以下删除连字符,正斜杠和空格:
newName = regexprep(name{i},'[-/\s]','');
Run Code Online (Sandbox Code Playgroud)
这里的好处是,\s
将匹配和替换所有空白字符,它包括正常的空间(ASCII码32)以及突出部,换行等.
如果你想成为安全,并删除所有的字符,是不是在一个有效的MATLAB变量/字段名称,可以简化上述这样:
newName = regexprep(name{i},'\W','');
Run Code Online (Sandbox Code Playgroud)
选项2:如果您不需要担心删除比你列出的3个字符以外的任何,你可以使用函数ISMEMBER像这样:
newName = name{i};
newName(ismember(newName,'-/ ')) = [];
Run Code Online (Sandbox Code Playgroud)
方案三:如果你只想让一切是字母数字字符和转储休息(连字符,空格,下划线等),你可以使用函数ISSTRPROP:
newName = name{i};
newName = newName(isstrprop(newName,'alphanum'));
Run Code Online (Sandbox Code Playgroud)
最简单的方法是使用内置函数genvarname.它会使名称看起来更加丑陋,但它保证是一个有效的名称,它将保留原始的唯一性.
如果您只想删除特定字符,可以使用regexprep:
regexprep('foo- /foo- /foo', '[- \/]', '')
Run Code Online (Sandbox Code Playgroud)