【问题标题】:Apply strsplit to Column of Strings (cellstr)将 strsplit 应用于字符串列 (cellstr)
【发布时间】:2015-01-08 21:57:15
【问题描述】:

是否可以在每个单元格中包含一个包含字符串的 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

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

【问题讨论】:

  • 尝试使用textscan 与两个分隔符, 和/
  • 谢谢 - 我忘了 textscan 也适用于字符串

标签: matlab


【解决方案1】:

您可以使用 regexp 和 'split' 修饰符来做到这一点:

D = regexp(C, '/', 'split');

这给出了一个由 1xN 个元胞数组组成的 Mx1 元胞数组。如果你想把它折叠成一个 MxN 元胞数组,使用

D = vertcat(D{:});

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 2011-06-19
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2017-04-14
    • 2021-03-20
    相关资源
    最近更新 更多