从字符串的单元格数组中读取特定字符

时间:2015-06-01 12:28:35

标签: matlab cell-array

我有一个维度1x6的单元格数组,如下所示:

A = {'25_2.mat','25_3.mat','25_4.mat','25_5.mat','25_6.mat','25_7.mat'};

我想以A{1}为例,'_'之后的数字,例如我的2

3 个答案:

答案 0 :(得分:1)

使用cellfunstrfindstr2double

out = cellfun(@(x) str2double(x(strfind(x,'_')+1:strfind(x,'.')-1)),A)

它是如何运作的?

  

此代码只是在'_'出现后查找字符索引一个数字。让我们称之为start_index。然后找到一个数字小于'.'字符出现次数的字符。让我们称之为end_index。然后检索start_indexend_index之间的所有字符。最后使用str2double将这些字符转换为数字。

示例输入:

A = {'2545_23.mat','2_3.mat','250_4.mat','25_51.mat','25_6.mat','25_7.mat'};

<强>输出:

>> out

out =

23     3     4    51     6     7

答案 1 :(得分:0)

您可以使用花括号{...}来访问单元格的内容。一旦访问了内容,就可以像使用普通数组一样使用索引来访问字符串的元素。例如:

test = {'25_2.mat', '25_3.mat', '25_4.mat', '25_5.mat', '25_6.mat', '25_7.mat'}
character = test{1}(4);

如果您的字符串长度是可变的,您可以使用strfind来查找所需字符的索引。

答案 2 :(得分:0)

假设_符号后的数字为非负整数:使用带lookbehind的正则表达式,然后将字符串转换为数字:

numbers = cellfun(@(x) str2num(x{1}), regexp(A, '(?<=\_)\d+', 'match'));