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

String 在matlab中计算子串的出现次数,string,matlab,count,String,Matlab,Count,我有一个单元格,类似这样的p={Face1 Face6 Scene6 Both9 Face9 Scene11 Both12 Face15}。我想计算有多少个面值,场景值,P中的两个值。我不关心字符串后面的数值(即,面1和面23将计为两个)。我尝试了以下方法(针对面),但我得到了错误“如果任何输入参数是单元格数组,第一个必须是字符串的单元格数组,第二个必须是字符数组” 有人有什么建议吗?谢谢大家! 使用regexp查找以所需文本(^)开头的字符串(例如'Face')。结果将是一个单元格数组,如果存

我有一个单元格,类似这样的p={Face1 Face6 Scene6 Both9 Face9 Scene11 Both12 Face15}。我想计算有多少个面值,场景值,P中的两个值。我不关心字符串后面的数值(即,面1和面23将计为两个)。我尝试了以下方法(针对面),但我得到了错误“如果任何输入参数是单元格数组,第一个必须是字符串的单元格数组,第二个必须是字符数组”


有人有什么建议吗?谢谢大家!

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


您的示例应该使用一些小的调整,前提是所有p都包含字符串,但如果单元格数组中有任何非字符串值,则可能会给出错误

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

(返回4)

谢谢你的回答和解释,路易斯!不过,使用regexp会吓到我。这是
regexp
:-)的一部分乐趣。无论如何,这一个正则表达式非常简单:只有
^
表示开始
>> 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
P= {'Face1' 'Face6' 'Scene6' 'Both9' 'Face9' 'Scene11' 'Both12' 'Face15'};
strToSearch='Face';
n = strfind(P,strToSearch);
numel([n{:}])