查找包含字符串的单元格索引

6113视图(过去30天)
新
2011年2月25日
嗨,我有一个单元格数组(40,000X1),其中每个单元格包含一个字符串。我想找到包含特定字符串的单元格的索引。
我使用了以下方法:
指数= strfind (Mycellarray,“Bla”);
我得到以下错误:???在35处使用==>cell.strfind时出错如果任何输入参数是单元格数组,则第一个必须是字符串的单元格数组,第二个必须是字符数组。
什么是错误的,在帮助文件strfind接受单元格数组和模式…?
非常感谢。
7评论
1月
1月 2017年9月26日
这是 一条错误消息。它只是告诉你,没有找到字符串。
你真的在寻找字符串“ggiBoundaries1(1,1)”?还是说:
查找(strcmp(rawdata,ggiBoundaries1(1,1)))
查找变量的第一个字符的出现次数 ggiBoundaries1
请不要将新问题附加到现有线程。最好打开一个新问题。谢谢。

登录以发表评论。

公认的答案

1月
1月 2011年2月25日
编辑:MathWorks支金宝app持团队 2021年3月23日
是否要在单元格数组的每个元素中的文本中搜索“bla”,还是要搜索完全为“bla”的元素?如果您解释此细节,您的问题将更容易回答。
正如Alexander Cranney指出的,如果你搜索的文本中有“bla”作为文本的一部分,那么从R2016b开始,你可以使用“contains”函数。
指数=找到(包含(C,“bla”));
函数“contains”返回逻辑数组。这种类型的逻辑索引可用于提高许多工作流的效率。有关使用逻辑数组的详细信息,请参阅文档:
在以前版本的MATLAB(R2016b之前)中,可以使用“strfind”函数。但是,“strfind”返回一个索引单元格数组。对于文本不包含“bla”的任何输入单元格,“strfind”将返回一个空单元格。在“查找”功能中使用“isempty”和“cellfun”查找空单元格。
IndexC=strfind(C,“bla”);
指数=找到(不是(cellfun (“isempty”,IndexC)))
如果您正在搜索的文本是完全'bla',然后看到Jos的答案。
10评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年1月22日
精确匹配掩码=strcmp(您的单元格,“bla”
exact_match_locations =找到(exact_match_mask)
前提是单元格条目都是字符向量。

登录以发表评论。

更多的答案(7)

周杰伦
周杰伦 2016年5月28日
编辑:周杰伦 2016年5月28日
这对我很有用:
idx =找到(ismember (C,“bla”))
7评论
每•艾萨克森
每•艾萨克森 2020年5月22日
它的工作原理是有据可查的。
第一次看到 行和列主顺序
Matlab使用列主顺序(我在文档中找不到可链接的页面)
试一试
%%
C = {{“一个”}, {“b”}, {“c”}, {“一个”}, {“一个”
“b”}, {“一个”}, {“c”}, {“一个”}, {“c”}};
%%
cac = [C {}):
Idx = find(strcmp(cac,“一个”))
%%
C1 = permute(C, [2,1]);%切换行和列
idx = find(strcmp([C1{:}],“一个”))
它输出
cac=
1×10个细胞数组
1到8
“一个”} {“b”} {“b”} {“一个”} {“c”} {“c”} {“一个”} {“一个”
9到10
“一个”} {“c”
idx =
1 4 7 8 9
idx =
1 4 5 7 9

登录以发表评论。


马特B
马特B 2013年11月14日
我意识到这个问题现在已经过时了,但是一个简单的方法是定义一个内联函数:
cellfind = @(字符串)(@ (cell_contents)(比较字符串(字符串,cell_contents)));
然后,您可以将其与cellfun一起使用,为单元格的每个元素返回一个布尔值。例如:
cell_数组={1,眼睛(2),true,“福”, 10};
字符串=“福”
逻辑_cells=cellfun(cellfind(“福”), cell_array)
逻辑单元=
(0, 0, 0, 1, 0]
3评论
1月
1月 2019年6月6日
@Matt B: 字符串比较函数 直接接受单元格数组,因此可以避免复杂的 赛尔芬 方法与昂贵的匿名函数:
cell_array ={1,眼(2),真的,“福”,10}
strcmp(单元阵列,“福”
> > (0, 0, 0, 1, 0]

登录以发表评论。


乔斯(10584)
乔斯(10584) 2011年2月25日
原来的数组是一个单元格数组单元格数组只有一个字符串。使用STRCMP和FIND获取包含指定字符串的单元格的索引
C = {{“一个”}, {“b”}, {“c”}, {“一个”}, {“一个”} }%资料
idx =找到(strcmp ([C {}):“一个”))单线发动机%

1月
1月 2011年2月25日
你可以检查你的单元格是否是一个单元格字符串:
iscellstr (Mycellarray);
这将显示非字符串的索引和内容:
Index=find(~cellfun)(“isclass”Mycellarray,“字符”))
菌丝体(指数);
另一个想法是,一些字符串是多行CHAR矩阵:
指数=找到(cellfun (“大小”,菌丝体,1)>1)

俄梅珥Moussaffi
俄梅珥Moussaffi 2017年2月26日
更快的选项:使用endsWith计数开始
E、 g,指数=计数(菌丝体,'Bla');
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年2月26日
是的,这个方法应该从R2016b开始就能很好地工作。

登录以发表评论。


彼得·法卡斯
彼得·法卡斯 2016年5月9日
您还可以明确定义索引矩阵:
[rw,~]=尺寸(射线);
ind=[1:1:rw];
idx = strcmp(cellArray, stringToSearchFor);
yourResult=ind(idx);
这有点冗长,如果你在2年的时间里检查代码,你仍然知道发生了什么。

穆克什Jadhav
穆克什Jadhav 2016年10月9日
编辑:每•艾萨克森 2017年1月10日
还没有测试,但这应该可以工作。
单词\u to \u find=strfind(strarray,“stringtofind”);
starray.index (word_to_find);

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!