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

5,735次浏览(过去30天)
新
2011年2月25日
嗨,我有一个单元格数组(40000x1),其中每个单元格都包含一个字符串。我想找到包含特定字符串的单元格的索引。
我使用了以下方法:
指数= strfind (Mycellarray,“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评论
1月
1月 2017年9月26日
这是 一条错误消息。它只是告诉您,没有找到字符串。
你真的在寻找字符串'ggiBoundaries1(1,1)'吗?还是说:
找到(strcmp (rawdata ggiBoundaries1 (1,1)))
搜索变量第一个字符出现的次数 ggiBoundaries1 ?
请不要向现有线程添加新问题。最好再开一个新的。谢谢。

登录发表评论。

接受的答案

1月
1月 2011年2月25日
编辑:MathWorks支持团队 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日
编辑:沃尔特·罗伯森 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”))
8的评论

登录发表评论。


马特·B
马特·B 2013年11月14日
我知道这个问题现在已经很老了,但一个简单的方法是定义一个内联函数:
cellfind = @(字符串)(@ (cell_contents)(比较字符串(字符串,cell_contents)));
然后,您可以将此与cellfun一起使用,为单元格的每个元素返回一个布尔值。例如:
cell_array ={1,眼(2),真的,“foo”, 10};
字符串=“foo”
logical_cells = cellfun (cellfind (“foo”), cell_array)
logical_cells =
(0, 0, 0, 1, 0]
3评论
1月
1月 2019年6月6日
@Matt B: 比较字符串 直接接受单元格数组,因此可以避免复杂的操作 cellfun 使用昂贵的匿名函数的方法:
cell_array ={1,眼(2),真的,“foo”, 10}
比较字符串(cell_array“foo”
> > (0, 0, 0, 1, 0]

登录发表评论。


乔斯(10584)
乔斯(10584) 2011年2月25日
你最初的数组是一个单元格数组单元格数组只有一个字符串。使用STRCMP和FIND获取包含指定字符串的单元格的索引
C = {{“一个”}, {“b”}, {“c”}, {“一个”}, {“一个”}}%的数据
idx =找到(strcmp ([C {}):“一个”))单线发动机
1评论
AATIQ OUSSAMA himani
AATIQ OUSSAMA himani 2017年4月16日
谢谢,Jos,它工作得很好!

登录发表评论。


俄梅珥Moussaffi
俄梅珥Moussaffi 2017年2月26日
更快的选项:count startwith endsWith
E,g, Index = count(Mycellarray, 'Bla');
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年2月26日
是的,这个方法从R2016b开始应该可以很好地工作。

登录发表评论。


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

彼得·法卡斯
彼得·法卡斯 2016年5月9日
你也可以显式定义索引矩阵:
[rw, ~] = size(cellArray);
印第安纳州= (1:1:rw);
idx = strcmp(cellArray, stringToSearchFor);
yourResult =印第安纳州(idx);
它有点啰嗦,如果你在2年的时间里检查代码,你仍然会知道发生了什么。

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

世界杯预选赛小组名单社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!世界杯预选赛小组名单

开始狩猎!

Baidu
map