在matlab中分割一个字符串

时间:2012-03-10 21:51:14

标签: string matlab cell

为了使这个问题更容易描述,我提供了以下示例代码,它类似于我正在使用的实际数据:

clear all
AirT = {rand(32,1),rand(32,1),rand(32,1),rand(32,1)};
SolRad = {rand(32,1),rand(32,1),rand(32,1),rand(32,1)};
Rain = {rand(32,1),rand(32,1),rand(32,1),rand(32,1)};
Location = {'England','Wales','Scotland','Ireland'};
points = {'old','old','old','new'};
CorrVariables = {'AirT','SolRad','Rain'};
for i = 1:length(Location);
    Data = @(location) struct('Location',location,CorrVariables{1},AirT{i},...
        CorrVariables{2},SolRad{i},CorrVariables{3},Rain{i});
    D(i) = Data(Location{i});
end
FieldName = {D.Location};
R = corrcoef([D.AirT],'rows','pairwise');
R_Value = [Location(nchoosek(1:size(R,1),2)) num2cell(nonzeros(tril(R,-1)))];
q = points(nchoosek(1:size(R,1),2));
    %to calculate the combination of these points we need to convert the
    %cell into a matrix.
Re = [R_Value q];

从这个例子中我想在Re的第5列中创建另一个单元数组,它取决于第4列和第5列中的字符串。因此,如果Re中的第4列和第5列相等,例如'old''old '然后第6列应显示'旧'。但是,如果细胞不同,例如'old''new'然后我想新的单元格数组(即Re中的第6列)表示'old / new'。

这怎么可能?

1 个答案:

答案 0 :(得分:2)

根据您的描述,我认为最明智的方法是使用字符串连接正则表达式的组合。

首先将第4列和第5列合并到一个新列中:

newColumn = strcat(Re(:,4), '/', Re(:,5));

现在查找重复的模式并替换为匹配的第一个标记:

newColumn = regexprep(newColumn, '(\w+)/\1', '$1');

结合现有的细胞矩阵:

Re = [Re, newColumn];