将strsplit应用于字符串列(cellstr)

时间:2015-01-08 21:57:15

标签: matlab

是否可以在每个单元格中包含一个包含字符串的Mx1单元格数组,并根据分隔符' /'分割每个这样的字符串。 (比如说)并将结果输出到MxN单元阵列,其中N是' /'出现的最大值。所有拆分字符串?

在我的情况下,' /'的出现次数是一致的(非均匀性的可能性通常是实现这样一个函数的问题,尽管可以想象存储NULL值)。

显然这可以通过一个循环实现,调用splitstr M次,但我希望存在一个矢量化解决方案。


帮助澄清。假设我们有

C {1,1} =" 1string / 2string /.../ Nstring"

C {2,1} =" 1string / 2string /.../ Nstring"

...

C {M,1} =" 1string / 2string /.../ Nstring"

我希望D

D {1,1} =" 1string" D {1,2} =" 2string" ...... D {1,N} =" Nstring"

D {2,1} =" 1string" D {2,2} =" 2string" ...... D {2,N} =" Nstring"

...

D {M,1} =" 1string" D {M,2} =" 2string" ...... D {M,N} =" Nstring"

或大致相当的东西(例如;输出不需要是MxN单元阵列;它仍然可以是Mx1单元阵列,但每个单元是带有单元的1xN(或Nx1)阵列是分裂的字符串)。


这是我当前的实现(但是使用M和N代替C和D;抱歉混淆)。

M = strtok(textscan(iID, formatSpec, 'Delimiter', ',', 'HeaderLines', 1){1,1}, '"');
% note that strtok will return a cell array of size TOTAL_ROWS x 1
N = cell(length(M), 3);
for i = 1:length(M)
  N(i,:) = strsplit(M{i,1}, '/');
endfor

由于文件很大,我想找到一个矢量化解决方案(如果有的话)。

1 个答案:

答案 0 :(得分:3)

您可以使用regexp 'split'修饰符

来执行此操作
D = regexp(C, '/', 'split');

这给出了1x N 单元阵列的 M x1单元阵列。如果要将其折叠为 M x N 单元格数组,请使用

D = vertcat(D{:});