How can I extract multiple values after certain term with regexp?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Dhani Dharmaprani
el 7 de Mzo. de 2016
Comentada: Dhani Dharmaprani
el 7 de Mzo. de 2016
Hi, I am new to using regexp and was wondering how I can extract all 'channel' values in my txt file. A snippet of the file is as follows:
Set 1
Average: 0.976
Channels: 0.973 0.985 0.988 0.989 0.981 0.986 0.99 0.977 0.953 0.992 0.979 0.923
Set 2
Average: 0.983
Channels: 0.978 0.98 0.983 0.985 0.976 0.982 0.985 0.984 0.994 0.991 0.991 0.969
I've found that using the expression '(?<=Channels\D*)\d*\.?\d+\' obtains only the first value after the word channels, so how can I obtain all 12 values for each set of channels?
Thank you kindly in advance!
0 comentarios
Respuesta aceptada
Guillaume
el 7 de Mzo. de 2016
There are many ways to write a regular expression (see Walter's answer), depending on exactly what restriction you want to place on what is matched and not matched.
A simple way to modify your regular expression is simply to repeat the match pattern until the end of the line:
channelvalues = regexp(filecontent, '(?<=Channels\D*)(\d*\.?\d+(?:\s+|$))+', 'match');
channelvalues = cellfun(@str2num, channelvalues, 'UniformOutput', false)
%if all lines are guaranteed to have the same number of elements:
channelvalues = cell2mat(channelvalues')
1 comentario
Más respuestas (2)
Walter Roberson
el 7 de Mzo. de 2016
'(?<=Channels:\s+).+$'
together with the parameter 'dotexceptnewline'
0 comentarios
Stephen23
el 7 de Mzo. de 2016
Editada: Stephen23
el 7 de Mzo. de 2016
fmt = ['Set%f\nAverage:%f\nChannels:',repmat('%f',1,12)];
fid = fopen('test.txt','rt');
M = cell2mat(textscan(fid,fmt));
fclose(fid);
It successfully reads all of the numeric data into one numeric matrix, much quicker than any solution using regexp would. I tested this code using your sample lines, saved into this file:
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!