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

6297次(过去30天)
刚出现的
刚出现的 2011年2月25日
嗨,我有一个单元格数组(40,000X1),其中每个单元格包含一个字符串。我想找到包含特定字符串的单元格的索引。
我使用了以下方法:
索引=strfind(菌丝体,“Bla”);
我得到以下错误:??使用==>单元格时出错。strfindat 35 If any of the input arguments are cell arrays, the first must be a cell array of strings and the second must be a character array.
什么是错误的,在帮助文件strfind接受单元格数组和模式…?
谢谢你!
7评论
简
2017年9月26日
这是 错误消息。它只是告诉您,找不到字符串。
你真的在寻找字符串'ggiBoundaries1(1,1)'吗?还是说:
找到(strcmp (rawdata ggiBoundaries1 (1,1)))
查找变量的第一个字符的出现次数 ggiBoundaries1
请不要将新问题附加到现有线程。最好再开一家新的。谢谢。

登录评论。

接受的答案

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

登录评论。

更多答案(7)

杰伊
杰伊 2016年5月28日
编辑:杰伊 2016年5月28日
这对我很有效:
idx=查找(ismember)(C,“bla”))
7评论
佩尔·伊萨克森
佩尔·伊萨克森 2020年5月22日
它按照文档的方式工作。
Matlab使用列-主顺序。(我在文档中找不到可以链接的页面。)
尝试
%%
C={{“a”}, {“b”}, {“c”}, {“a”}, {“a”
“b”}, {“a”}, {“c”}, {“a”}, {“c”} };
%%
cac = [C {}):
Idx = find(strcmp(cac,“a”))
%%
C1=置换(C,[2,1]);%交换行和列
idx=find(strcmp([C1{:}],“a”))
它输出
cac =
1×10单元大堆
1至8
“a”} {“b”} {“b”} {“a”} {“c”} {“c”} {“a”} {“a”
9到10
“a”} {“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_array ={1,眼(2),真的,“foo”,10};
串=“foo”
logical_cells = cellfun (cellfind (“foo”),单元格(U阵列)
logical_cells =
[0,0,0,1,0]
3评论
简
2019年6月6日
@马特B: 比较字符串 直接接受单元格数组,因此可以避免复杂的 cellfun 使用昂贵的匿名函数:
cell_数组={1,眼睛(2),true,“foo”, 10}
比较字符串(cell_array“foo”
> > (0, 0, 0, 1, 0]

登录评论。


何塞(10584)
何塞(10584) 2011年2月25日
所以,您的原始数组是一个由单个字符串组成的单元格数组。使用STRCMP和FIND获取包含指定字符串的单元格的索引
C={{“a”}, {“b”}, {“c”}, {“a”}, {“a”} }%的数据
idx=find(strcmp([C{:}]),“a”))单线发动机%

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

俄梅珥Moussaffi
俄梅珥Moussaffi 2017年2月26日
更快的选项:计数开始与结束与
E,g, Index = count(Mycellarray, 'Bla');
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年2月26日
是的,从R2016b开始,这种方法应该很有效。

登录评论。


彼得·法卡斯
彼得·法卡斯 2016年5月9日
你也可以明确地定义索引矩阵:
[rw, ~] = size(cellArray);
印第安纳州= (1:1:rw);
idx = strcmp(cellArray, stringToSearchFor);
yourResult =印第安纳州(idx);
这有点冗长,如果你在2年内回顾代码,你仍然会知道发生了什么。

穆克什·贾达夫
穆克什·贾达夫 2016年10月9日
编辑:佩尔·伊萨克森 2017年1月10日
还没有测试,但这应该可以正常工作。
单词\u to \u find=strfind(strarray,“stringtofind”);
starray.index (word_to_find);

社区寻宝

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

开始狩猎!