regexp string to numeric array
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have what seems like a common problem: a series of strings containing numeric data mixed with text. I want to extract those numbers into vectors or arrays. I have come up with the mock-up below, but it feels like a cludge. Is there a simple, readable one-liner that does the same?
str = {'bob22alice666buster2', 'donald42lisa00buddy9'};
pat = '\w*(\d{2})\w*(\d{2,3})\w*(\d{1})';
for idx = 1:2
tmp = regexp(str{idx}, pat, 'tokens');
male(idx) = str2double(tmp{1}(1));
female(idx) = str2double(tmp{1}(2));
doggie(idx) = str2double(tmp{1}(3));
end
I was hoping for something ala:
for ...
Mx3arr = str2num(regexp(str{idx}, pat, 'tokens')');
end
0 Kommentare
Antworten (2)
Jan
am 4 Nov. 2016
Bearbeitet: Jan
am 4 Nov. 2016
str = {'bob22alice666buster2', 'donald42lisa00buddy9'};
pat = '\w*(\d{2})\w*(\d{2,3})\w*(\d{1})';
tmp = regexp(str, pat, 'tokens');
C1 = cat(1, tmp{:});
C2 = cat(1, C1{:});
M = str2double(C2);
I still prefer the dull string parsing without regexp:
S = sprintf('%s ', str{:});
S(isstrprop(S, 'alpha')) = ' ';
M = sscanf(S, '%d', [3, inf]);
Although it looks less smart, it works without clutter and much faster.
0 Kommentare
Stephen23
am 20 Apr. 2023
Assuming that every string contains exactly the same number of numeric data:
str = {'bob22alice666buster2', 'donald42lisa00buddy9'};
tmp = regexp(str,'\d+','match');
mat = str2double(vertcat(tmp{:}))
0 Kommentare
Siehe auch
Kategorien
Mehr zu Characters and Strings finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!