matlab - 从(奇数)字符串中提取数字

时间:2013-01-27 16:51:30

标签: regex matlab

我在cvs文件中有一系列字符串,它们看起来都像下面两个:

7336598,"[4125420656L, 2428145712L, 1820029797L, 1501679119L, 1980837904L, 380501274L]"
7514340,"[507707719L, 901144614L, 854823005L]"
....

如何提取其中的数字? 如...在retreive 7336598,4125420656等....

尝试textscanregexp,但没有太大成功......

对不起初学者的问题......谢谢你看看! :)

编辑:每一行的大小都是可变的。

2 个答案:

答案 0 :(得分:6)

您可以使用textreadregexp仅提取CSV文件中的数字:

C = textread('file.cvs', '%s', 'delimiter', '\n');
C = regexp(C, '\d+', 'match'); 

正则表达式非常简单。在MATLAB的regexp模式中,\d表示一个数字,+表示该数字必须至少出现一次。 match模式告诉regexp返回匹配的字符串。

结果是cell array个字符串。您可以进一步将字符串转换为数值:

C = cellfun(@(x)str2num(sprintf('%s ', x{:})), C, 'Uniform', false)

结果仍存储在单元格数组中。如果您可以保证每行中的数值相同,则可以将单元格数组转换为矩阵:

A = cell2mat(C);

答案 1 :(得分:2)

我没有matlab来测试,但是'[0-9] +'能完成这项工作吗?

它在matlab之外适用于我:

echo '7336598,"[4125420656L, 2428145712L, 1820029797L, 1501679119L, 1980837904L, 380501274L]"' | grep -o '[0-9]\+'
7336598
4125420656
2428145712
1820029797
1501679119
1980837904
380501274