我在cvs文件中有一系列字符串,它们看起来都像下面两个:
7336598,"[4125420656L, 2428145712L, 1820029797L, 1501679119L, 1980837904L, 380501274L]"
7514340,"[507707719L, 901144614L, 854823005L]"
....
如何提取其中的数字? 如...在retreive 7336598,4125420656等....
尝试textscan
和regexp
,但没有太大成功......
对不起初学者的问题......谢谢你看看! :)
编辑:每一行的大小都是可变的。
答案 0 :(得分:6)
您可以使用textread
和regexp
仅提取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