How can I extract multiple values after certain term with regexp?
조회 수: 4 (최근 30일)
이전 댓글 표시
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
채택된 답변
Guillaume
2016년 3월 7일
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')
추가 답변 (2개)
Walter Roberson
2016년 3월 7일
'(?<=Channels:\s+).+$'
together with the parameter 'dotexceptnewline'
댓글 수: 0
Stephen23
2016년 3월 7일
편집: Stephen23
2016년 3월 7일
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:
참고 항목
카테고리
Help Center 및 File Exchange에서 Characters and Strings에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!