我在 cvs 文件中有一系列字符串,它们看起来都像下面两个:
7336598,"[4125420656L, 2428145712L, 1820029797L, 1501679119L, 1980837904L, 380501274L]"
7514340,"[507707719L, 901144614L, 854823005L]"
....
如何提取其中的数字? 如...检索 7336598、4125420656 等....
尝试了 textscan
和 regexp
,但不太成功...
抱歉初学者的问题...感谢您的浏览! :)
编辑:每行的大小是可变的。
最佳答案
您可以使用 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);
关于regex - matlab - 从(奇数)字符串中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14549664/