Arrays 在Matlab中迭代逗号分隔的列表会出现错误:“0”;对于表达式,逗号分隔列表必须只有一项。”;

Arrays 在Matlab中迭代逗号分隔的列表会出现错误:“0”;对于表达式,逗号分隔列表必须只有一项。”;,arrays,regex,excel,matlab,Arrays,Regex,Excel,Matlab,我试图通过清除一些文本中不必要的垃圾来清理一些文本数据。文本当前存在于Excel数据集中,全部位于一列中,每个文本“项”占用一行。这些项都是字符串,每个字符串中有几个到多个单词。我使用下面的代码(第2块)提取了这些项目,它给了我list1,这是一个14510x1单元 我试图在Matlab中运行这个for循环: function list2 = cleanup(exp_spec,list1) for i = list1{(1:length(list1))}; str = i;

我试图通过清除一些文本中不必要的垃圾来清理一些文本数据。文本当前存在于Excel数据集中,全部位于一列中,每个文本“项”占用一行。这些项都是字符串,每个字符串中有几个到多个单词。我使用下面的代码(第2块)提取了这些项目,它给了我list1,这是一个14510x1单元

我试图在Matlab中运行这个for循环:

function list2 = cleanup(exp_spec,list1)
for i = list1{(1:length(list1))};
        str = i;
        replace = '';
        list2{i} = regexprep(str,exp_spec,replace);
    end
end
我从excel表格中得到了“列表1”,如下所示:

[~,txt,~] = xlsread('spreadsheet.xlsx','T:T');
    list1 = txt;
function list2 = cleanup(exp_spec,list1)
    replace = '';
    for i = 1:length(list1)
        list2{i} = regexprep(list1{i},exp_spec,replace);
    end
end
当我试图用这行代码运行代码时

list2 = cleanup('&#[0-9]+;',list1);
clean_list = list2;
它抛出错误:

FOR expression comma separated list must have exactly one
item.

    Error in cleanup (line 2)
    for i = list1{(1:length(list1))};

    Error in project_main (line 57)
        list2 = cleanup('&#[0-9]+;',list1);

我已经找了几个小时试图找出一个解决办法,但到目前为止我什么也没找到。我试着转置列表1,但仍然不起作用。另外,当我调用list1{1}等东西时,它总是正确工作并返回整个字符串。我对Matlab很陌生,所以答案可能很简单!如果我遗漏了一些有用的东西,请告诉我。谢谢你的帮助。谢谢大家!

给定一个单元格c,
c{1:2}
的输出产生一个逗号分隔的列表,相当于
c{1},c{2}
。如果将该显式逗号分隔列表替换为

for i=c{1:2}
你得到

for i=c{1},c{2}
这不是合法的语法,所以你会得到一个错误

我认为更直接的方法是迭代索引本身,比如:

[~,txt,~] = xlsread('spreadsheet.xlsx','T:T');
    list1 = txt;
function list2 = cleanup(exp_spec,list1)
    replace = '';
    for i = 1:length(list1)
        list2{i} = regexprep(list1{i},exp_spec,replace);
    end
end
一种高级方法是使用cellfun和匿名函数:

l2 = cellfun(@(str)regexprep(str,exp_spec,replace), ...
     l1, 'UniformOutput', false);

很好用!当然,这会很简单。非常感谢你!请注意,我刚刚从示例代码中删除了一个不需要的副本,它只会减慢代码的速度:-)