3

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

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

如何提取其中的数字?如......检索7336598、4125420656等......

试过了textscan,而且regexp,但没有太大的成功...

对不起初学者的问题......感谢您的关注!:)

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

4

2 回答 2

6

您可以使用textreadandregexp仅从 CSV 文件中提取数字:

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

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

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

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

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

A = cell2mat(C);
于 2013-01-27T17:02:51.030 回答
2

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

它在 matlab 之外对我有用:

echo '7336598,"[4125420656L, 2428145712L, 1820029797L, 1501679119L, 1980837904L, 380501274L]"' | grep -o '[0-9]\+'
7336598
4125420656
2428145712
1820029797
1501679119
1980837904
380501274
于 2013-01-27T16:57:15.837 回答