获取单元格数组中字符串出现的索引

Get indices of string occurrences in cell-array

我有一个包含一长串字符串的元胞数组。大多数字符串都是重复的。我需要元胞数组中字符串实例的索引。

我尝试了以下方法:

[bool,ind] = ismember(string,var);

一致 returns 标量 ind 而元胞数组中的内容显然有多个索引匹配 string.

如何获得指向元胞数组中包含 string 的位置的索引列表?

作为 Divakar 评论的替代方法,您可以使用 strcmp。即使某些单元格不包含字符串,这也有效:

>> strcmp('aaa', {'aaa', 'bb', 'aaa', 'c', 25, [1 2 3]})
ans =
     1     0     1     0     0     0

或者,您可以对每个字符串进行标识,从而获得与输入元胞数组和字符串对应的代表性数值数组。对于 IDing,您可以使用 unique,然后像处理数值数组一样使用 find。以下是您可以实现的方法 -

var_ext = [var string]
[~,~,idx] = unique(var_ext)
out = find(idx(1:end-1)==idx(end))

代码分解:

  • var_ext = [var string]:将所有内容(字符串和变量)连接到一个单元格数组中,字符串在它的末尾(最后一个元素)结束。

  • [~,~,idx] = unique(var_ext):标识该串联元胞数组中的所有内容。

  • find(idx(1:end-1)==idx(end))idx(1:end-1) 表示元胞数组元素的数字 ID,idx(end)string 的 ID。比较这些 ID 并使用 find 来选择匹配的索引给我们最终的输出。


样本运行-

输入:

var = {'er','meh','nop','meh','ya','meh'}
string = 'meh'

输出:

out =
     2
     4
     6

正则表达式可以更好、更简单地解决这个问题。

string  = ['my' 'bat' 'my' 'ball' 'my' 'score']
expression = ['my']

regexp(string,expresssion)
ans = 1 6 12