在matlab中计算子串的出现次数

时间:2014-06-18 22:25:10

标签: string matlab count

我有一个单元格,像这样 P = {Face1 Face6 Scene6 Both9 Face9 Scene11 Both12 Face15} 。我想计算P中有多少面值,场景值,两个值。我不关心字符串后的数值(即,Face1和Face23将被计为两个)。我已经尝试了以下(针对Face)但是我得到了错误"如果任何输入参数是单元格数组,则第一个必须是字符串的单元格数组,第二个必须是字符数组&# 34。

strToSearch='Face';
numel(strfind(P,strToSearch));

有没有人有任何建议?谢谢!

2 个答案:

答案 0 :(得分:3)

使用regexp查找以所需文字(例如^)开头('Face')的字符串。结果将是一个单元格数组,如果匹配则每个单元格包含1,否则为[]。因此,确定每个单元格是否为非空(~cellfun('isempty', ...):将为非空单元格提供逻辑1,为空单元格提供0,并对结果(sum)求和:

>> P = {'Face1' 'Face6' 'Scene6' 'Both9' 'Face9' 'Scene11' 'Both12' 'Face15'};
>> sum(~cellfun('isempty', regexp(P, '^Face')))
ans =
     4

>> sum(~cellfun('isempty', regexp(P, '^Scene')))
ans =
     2

答案 1 :(得分:0)

如果所有P都包含字符串,那么您的示例应该使用一些小的调整,但如果单元格数组中存在任何非字符串值,则可能会出现错误。

P= {'Face1' 'Face6' 'Scene6' 'Both9' 'Face9' 'Scene11' 'Both12' 'Face15'};
strToSearch='Face';
n = strfind(P,strToSearch);
numel([n{:}])

(返回4)