在主字符串中提取随机选择的字符串:MATLAB

时间:2018-06-01 23:54:04

标签: regex string matlab random cell

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

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 )。请注意,我们只从转到右侧侧。

Example A

然而,如果所选号码中有n 打开 括号,我们必须跳过n < strong> 关闭 括号以进入我们正在寻找的结束括号,如图 B 所示。

Example B enter image description here

  

如果您有任何意见或建议,请与我们联系。谢谢。

1 个答案:

答案 0 :(得分:2)

首先,找到12的位置以获得随机位置。

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)) = [];