필터 지우기
필터 지우기

regexp string to numeric array

조회 수: 4 (최근 30일)
Knut
Knut 2016년 11월 4일
답변: Stephen23 2023년 4월 20일
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

답변 (2개)

Jan
Jan 2016년 11월 4일
편집: Jan 2016년 11월 4일
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.

Stephen23
Stephen23 2023년 4월 20일
Assuming that every string contains exactly the same number of numeric data:
str = {'bob22alice666buster2', 'donald42lisa00buddy9'};
tmp = regexp(str,'\d+','match');
mat = str2double(vertcat(tmp{:}))
mat = 2×3
22 666 2 42 0 9

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by