获取单元格数组中字符串出现的索引
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
我有一个包含一长串字符串的元胞数组。大多数字符串都是重复的。我需要元胞数组中字符串实例的索引。
我尝试了以下方法:
[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