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

8138次浏览(过去30天)
新的
新的 2011年2月25日
嗨,我有一个细胞参数(40,000x1),其中每个细胞都包含一个字符串。我想找到包含特定字符串的单元格的索引。
我用了以下内容:
index = strfind(mycellarray,'bla');
我得到以下错误:??使用==> cell.strfind在35中出现错误,如果任何输入参数是单元阵列,则第一个必须是字符串的单元格数组,第二个必须是字符数组。
有什么是错误的,在帮助文件strfind中接受单元格阵列和模式......?
谢谢你!
7评论
1月
1月 2017年9月26日
这是 错误消息。它只是告诉你,找不到字符串。
你真的在寻找字符串' ggibounaries1(1,1)'吗?还是说:
找到(strcmp (rawdata ggiBoundaries1 (1,1)))
搜索变量的第一个字符的发生 ggiboundaries1.
请不要将新问题附加到现有线程。最好再开一个。谢谢。

登录发表评论。

接受的答案

1月
1月 2011年2月25日
编辑:Mathworks支金宝app持团队 2021年3月23日14:59
您想要在单元格数组的每个元素的文本中搜索'bla',还是搜索完全是'bla'的元素?如果你解释一下这个细节,那么你的问题就容易回答了。
如果您正在搜索具有“BLA”的文本作为文本的一部分,那么从R2016B开始,您可以使用“包含”功能,因为亚历山大Cranney指出。
index = find(包含(c,'bla'));
函数"contains"返回一个逻辑数组。这种类型的逻辑索引可用于提高许多工作流的效率。有关使用逻辑阵列的更多信息,请参考文档:
在MATLAB的早期版本中(R2016b之前),可以使用“strfind”函数。但是,“strfind”返回一个索引的单元格数组。对于任何文本不包含'bla'的输入单元格," strfind "返回一个空单元格。使用" isempty "和" cellfun "和" find "函数来查找空的单元格。
IndexC = strfind (C,'bla');
index =查找(不是(cellfun('是空的'IndexC)))
如果您正在搜索完全'bla'的文本,那么请参阅JOS的答案。
10评论
沃尔特罗伯森
沃尔特罗伯森 2021年1月22日
exact_match_mask = strcmp (YourCell,'bla'
Exact_match_locations = find(Excript_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 =换算(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 = @(string)(@(cell_contents)(strcmp(string,cell_contents)));
然后,您可以使用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条评论
Aatiq Oousama.
Aatiq Oousama. 2017年4月16日
谢谢Jos,它工作得很好!

登录发表评论。


omer moussaffi
omer moussaffi 2017年2月26日
更快的选项:计数开始与结束与
E,g, Index = count(Mycellarray, 'Bla');
1条评论
沃尔特罗伯森
沃尔特罗伯森 2017年2月26日
是的,此方法应从R2016B开始良好。

登录发表评论。


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

Peter Farkas.
Peter Farkas. 2016年5月9日
你也可以显式定义索引矩阵:
[rw, ~] = size(cellArray);
印第安纳州= (1:1:rw);
idx = strcmp(cellarray,stringtosearch for);
yourResult =印第安纳州(idx);
如果您在2年内审核代码,那就有点冗长,您仍然会知道发生了什么。

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

社区寻宝

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!