首页 > 解决方案 > 在主字符串中提取随机选择的字符串:MATLAB

问题描述

我正在使用的字符串类似于下面写的字符串:

String_1='{2,2,1,1,{1,1,2,2,{1,2,{1,1,1,1,1}},2,2},{1,2,{1,2,2,2,2,2},2},{1,1},2,2,2,2,1,1,1,1,1}';

首先,我必须随机选择字符串中的一个数字。之后,我必须将所选数字中的字符串提取到第一个}并用它创建另一个字符串(参见图A)。注意,我们只从左边移动到右边

示例 A

但是,如果所选数字中有n 括号,我们必须跳过n 括号才能找到我们正在寻找的右括号,如图B所示。

示例 B 在此处输入图像描述

如果您有任何意见或建议,请告诉我。谢谢你。

标签: regexstringmatlabrandomcell

解决方案


首先,找到 和 的位置,1得到2一个随机位置。

inds = find(String_1 == '1' | String_1 == '2');
random_number_pos = inds(randi(length(inds)));

现在,我们可以使用堆栈的概念来找到第一个}没有打开的。

parentheses_opened = 0;
start_ind = random_number_pos + 2; end_ind = 0;
for ind = (random_number_pos + 2):length(String_1)
    if(String_1(ind) == '}' && parentheses_opened == 0)
        end_ind = ind - 1;
        break;
    elseif(String_1(ind) == '{')
        parentheses_opened = parentheses_opened + 1;
    elseif(String_1(ind) == '}')
        parentheses_opened = parentheses_opened - 1;
    end
end

String_2 = String_1(start_ind:end_ind);
String_1((start_ind - 1):(end_ind + 1)) = [];

推荐阅读