我试图通过删除某些文本中不必要的垃圾来清理一些文本数据。该文本当前存在于Excel数据集中,全部在一列中,每个"项目"文本占据每行一行。这些项目都是字符串,每个字符串中包含几个到多个单词。我使用下面的代码(第二个块)提取了项目,它给了我list1,这是一个14510x1的单元格。
我试图在Matlab中运行for 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
我得到了" list1"来自excel表,如下:
[~,txt,~] = xlsread('spreadsheet.xlsx','T:T');
list1 = txt;
当我尝试使用此行运行代码时,
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);
我一直在寻找HOURS试图找到解决方案,到目前为止我一无所获。我试过转换list1但它仍然无法正常工作。此外,当我调用类似list1 {1}等的东西时,它总是正常工作并返回整个字符串。我对Matlab很陌生,所以答案可能非常简单!如果我留下了有用的东西,请告诉我。我感谢任何帮助。谢谢!
答案 0 :(得分:1)
给定一个单元格c,c{1:2}
的输出产生一个等同于c{1},c{2}
的逗号分隔列表。如果将该明确的逗号分隔列表替换为
for i=c{1:2}
你得到了
for i=c{1},c{2}
这不是合法语法,因此您会收到错误消息。
我认为迭代索引本身会更直接,如下所示:
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);