如何格式化字符串以用作MATLAB中的结构字段名称?

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)

  • 有些人在面对问题时会想"我知道,我会使用正则表达式".现在他们有两个问题.:)认真地 - 好吧. (2认同)

Ric*_*h C 6

最简单的方法是使用内置函数genvarname.它会使名称看起来更加丑陋,但它保证是一个有效的名称,它将保留原始的唯一性.

如果您只想删除特定字符,可以使用regexprep:

regexprep('foo- /foo- /foo', '[- \/]', '')
Run Code Online (Sandbox Code Playgroud)

  • +1:`genvarname`是解决整体问题的正确方法.然而,正则表达式是解决简单问题的重要解决方案. (2认同)