替换Simulink块名称中的非法字符

时间:2017-03-23 08:44:06

标签: regex matlab simulink alphanumeric

我对Matlab-Simulink编程有疑问。

blocks = find_system(model_name, 'FindAll', 'on', 'LookUnderMasks', 'on', 'Type', 'block');

%replace all non alphanumerical characters with empty string
for i=1:length(blocks)
    regexprep(get_param(blocks(i), 'Name'), '\W*', ''); %'[^a-zA-Z_0-9]'
end

这是我的代码。我想在块名中只允许使用字母数字字符和下划线。但如果我运行程序,名称将不会改变。 奇怪的是,如果我在for循环的行尾放出分号,在命令窗口中名称实际上正在改变......

我知道解决方案可能很简单,但我只是没有做对。 提前谢谢!

1 个答案:

答案 0 :(得分:2)

当您致电regexprep(get_param(blocks(i), 'Name'), '\W*', '');时,实际上是在替换无效字符,但是您没有分配替换后的字符串。

如果您修改了以下呼叫:

set_param(blocks(i), 'Name', regexprep(get_param(blocks(i), 'Name'), '\W*', ''));

将为块设置替换名称。

整个片段看起来像:

blocks = find_system(model_name, 'FindAll', 'on', 'LookUnderMasks', 'on', 'Type', 'block');

for i=1:length(blocks)
    block = blocks(i);
    set_param(block, 'Name', regexprep(get_param(block, 'Name'), '\W*', ''));
end