我有一个维度1x6
的单元格数组,如下所示:
A = {'25_2.mat','25_3.mat','25_4.mat','25_5.mat','25_6.mat','25_7.mat'};
我想以A{1}
为例,'_'
之后的数字,例如我的2
答案 0 :(得分:1)
out = cellfun(@(x) str2double(x(strfind(x,'_')+1:strfind(x,'.')-1)),A)
它是如何运作的?
此代码只是在
'_'
出现后查找字符索引一个数字。让我们称之为start_index
。然后找到一个数字小于'.'
字符出现次数的字符。让我们称之为end_index
。然后检索start_index
和end_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'));