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

6.123意见(过去30天)
新的
新的 2011年2月25日
您好,我有一个单元格aray(40000x1),其中每个单元格都包含一个字符串。我想查找包含特定字符串的单元格的索引。
我使用了以下方法:
指数= strfind (Mycellarray,“布拉”);
我得到以下错误:??使用==>单元格时出错。斯特芬德at 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评论
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'的元素?如果你解释一下这个细节,你的问题就容易回答了。
如果您正在搜索具有“BLA”的文本作为文本的一部分,那么从R2016B开始,您可以使用“包含”功能,因为亚历山大Cranney指出。
index = find(包含(c,“布拉”));
函数"contains"返回一个逻辑数组。这种类型的逻辑索引可以用来提高许多工作流的效率。有关使用逻辑数组的更多信息,请参阅文档:
在之前的MATLAB版本中(在R2016b之前),可以使用“strfind”函数。然而,“strfind”返回一个包含索引的单元格数组。对于任何文本不包含'bla'的输入单元格," strfind "将返回一个空单元格。使用“isempty”和“cellfun”与“find”功能查找空单元格。
IndexC = strfind (C,“布拉”);
索引=查找(非)单元格(“我是空的”IndexC)))
如果您正在搜索完全是“bla”的文本,请查看Jos的答案。
10条评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年1月22日
exact_match_mask = strcmp (YourCell,“布拉”)
精确匹配位置=查找(精确匹配掩码)
如果您的小区条目是所有字符向量。

登录评论。

更多的答案(7)

杰
2016年5月28日
编辑: 2016年5月28日
这对我很有效:
idx =查找(ISMember(C,“布拉”))
7评论
每只伊拉克森
每只伊拉克森 2020年5月22日
它按照文档的方式工作。
Matlab使用列-主顺序。(我在文档中找不到可以链接的页面。)
尝试
%%
C = {{'一种'}, {'B'}, {“c”}, {'一种'}, {'一种'}
{'B'}, {'一种'}, {“c”}, {'一种'}, {“c”}};
%%
cac=[C{:}]
idx=查找(strcmp)(cac,'一种'))
%%
C1 =换算(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=@(字符串)(@(单元格内容)(strcmp(字符串,单元格内容));
然后,您可以将其与cellfun一起使用,为单元格的每个元素返回布尔值。例如:
cell_array ={1,眼(2),真的,“foo”,10};
字符串=“foo”
logical_cells = cellfun (cellfind (“foo”),cell_array)
logical_cells =
[0,0,10]
3评论
1月
1月 2019年6月6日
@Matt B: 比较字符串 直接接受单元格数组,因此可以避免复杂的 cellfun 使用昂贵的匿名功能方法:
Cell_Array = {1,Eye(2),真实,“foo”, 10}
比较字符串(cell_array“foo”)
>> [0,0,0,1,0]

登录评论。


JOS(10584)
JOS(10584) 2011年2月25日
因此,您的原始阵列是具有单个字符串的单元格数组。使用strcmp并找到使用包含指定字符串的单元格获取单元格的索引
C = {{'一种'}, {'B'}, {“c”}, {'一种'}, {'一种'}}%的数据
idx = find(strcmp([c {:}],'一种'))%单线发动机

1月
1月 2011年2月25日
您可以检查您的单元格是否为单元格字符串:
iscellstr (Mycellarray);
这将显示非字符串的索引和内容:
指数=找到(~ cellfun (“iClass”,mycellarray,“字符”))
disp (Mycellarray(指数));
另一个想法是,有些字符串是多行字符矩阵:
index = find(cellfun('尺寸', Mycellarray, 1) >

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

登录评论。


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

Mukesh Jadhav.
Mukesh Jadhav. 2016年10月9日
编辑:每只伊拉克森 2017年1月10日
没有测试,但这应该工作很好。
word_to_find = strfind (strarray,“stringtofind”);
starray.index(要查找的单词);

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!

翻译人