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

7,549次浏览(过去30天)
新
2011年2月25日
编辑: 沃尔特罗伯森 2021年1月22日
嗨,我有一个细胞参数(40,000x1),其中每个细胞都包含一个字符串。我想找到包含特定字符串的单元格的索引。
我用了以下内容:
index = strfind(mycellarray,'bla');
我收到以下错误:???使用==> cell.strfind在35中出现错误,如果任何输入参数是单元阵列,则第一个必须是字符串的单元格数组,第二个必须是字符数组。
有什么是错误的,在帮助文件strfind中接受单元格阵列和模式......?
谢谢

7点评论

展示 4岁的评论
1月
1月 于2013年2月22日
@felipe:究竟。如果仅包含字符串,则单元格是单元格串。STRFIND仅适用于字符串和单元格串。
yusuf arslan.
yusuf arslan. 2017年9月26日
你好,我有一个类似的问题。
找到(strcmp (rawdata, ggiBoundaries1 (1,1)))
我想在Rawdata找到GGiboundaries1的第一个条目。但它不起作用。错误消息是=
“0×1空双列向量”
当我输入“ggiboundaries1(1,1)”时,输出是一个char。也许这是问题还是不是?
1月
1月 2017年9月26日
这是 不是 一条错误消息。它只是告诉您,没有找到字符串。
你真的在寻找'ggiboundaries1(1,1)'吗?或者你的意思是:
查找(Strcmp(Rawdata,GGiboundaries1(1,1)))
搜索变量的第一个字符的发生 ggiBoundaries1
请不要将新问题追加到现有线程。更好地打开一个新的。谢谢。

登录评论。

接受答案

1月
1月 2011年2月25日
编辑:MathWorks支金宝app持团队 2018年11月8日
您是否想在单元格数组的每个元素中的文本中搜索“bla”,或完全是'bla'的元素?如果解释此细节,那么您的问题会更容易回答。
正如Alexander Cranney指出的那样,如果你正在搜索文本中包含“bla”,那么从R2016b开始,你可以使用“contains”函数。
指数=找到(包含(C,'bla'));
在以前的MATLAB版本中,您可以使用“strfind”功能。但是,“strfind”返回一个小区的指数阵列。对于任何未包含'BLA'的输入单元格,“strfind”返回一个空的单元格。使用“isEmpty”和“Cellfun”,“查找”功能找到空单元格。
IndexC = strfind(c,'bla');
index =查找(不是(cellfun('是空的',INDEXC)))
如果您正在搜索完全'bla'的文本,那么请参阅JOS的答案。

10评论

展示 7岁的评论
Aditi Bishnoi.
Aditi Bishnoi. 2021年1月22日
如果我想找到确切的字符串匹配'bla',可以使用什么。
我的细胞阵列既是'BLA'和'BLAH'元素,还想要挑选'BLA'。
沃尔特罗伯森
沃尔特罗伯森 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点评论

展示 4岁的评论
Einat
Einat 2019年6月5日
是的!就像我需要的那样工作。
安克尔·瓦德瓦
安克尔·瓦德瓦 于1月17日2020年1月17日
不起作用这一点
c = {{“一个”},{“b”},{“c”},{“一个”},{“一个”}; {“b”},{“一个”},{“c”},{“一个”},{“c”}}
idx =找到(strcmp ([C {}):“一个”)))
返回
Idx = 1 4 7 8 9
关于如何解决它的任何建议。
每•艾萨克森
每•艾萨克森 20月22日
它按照文件工作。
第一次看到 行和列主要订单
Matlab使用列主序。(我在文档中找不到可以链接到的页面。)
试一试
%%
c = {{“一个”},{“b”},{“c”},{“一个”},{“一个”}
{“b”},{“一个”},{“c”},{“一个”},{“c”}};
%%
cac = [c {:}]
idx = find(strcmp(cac,“一个”)))
%%
C1 = permute(C, [2,1]);切换行和列
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,Eye(2),真实,'foo', 10};
字符串='foo'
logical_cells = cellfun(cellfind('foo'), cell_array)
logical_cells =
(0, 0, 0, 1, 0]

3评论

Sepp.
Sepp. 2016年2月27日
伟大的答案。工作很好。
乔希戈尔
乔希戈尔 2017年1月26日
内联函数是救生员!
1月
1月 2019年6月6日
@Matt B: Strcmp. 直接接受一个单元格数组,以免避免复杂 Cellfun. 使用昂贵的匿名函数的方法:
cell_array ={1,眼(2),真的,'foo', 10}
Strcmp(Cell_Array,'foo'
>> [0,0,0,1,0]

登录评论。


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

1条评论

Aatiq Oousama.
Aatiq Oousama. 2017年4月16日
谢谢JOS,它可以很好!

登录评论。


omer moussaffi.
omer moussaffi. 2017年2月26日
更快的选项:Count Startswith Exdswith
e,g,index = count(mycellarray,'bla');

1条评论

沃尔特罗伯森
沃尔特罗伯森 2017年2月26日
是的,此方法应从R2016B开始良好。

登录评论。


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

0评论

登录评论。


彼得·法卡斯
彼得·法卡斯 2016年5月9日
您还可以显着定义索引矩阵:
[RW,〜] =尺寸(Cellarray);
IND = [1:1:RW];
idx = strcmp(cellarray,stringtosearch for);
yourresult = Ind(IDX);
如果您在2年内审核代码,那就有点冗长,您仍然会知道发生了什么。

0评论

登录评论。


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

0评论

登录评论。

社区宝藏狩猎

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

开始狩猎!