Reading numbers from String

6 views (last 30 days)
Lukas Ehrler
Lukas Ehrler on 20 Jul 2022
Answered: Steven Lord on 20 Jul 2022
Hello,
I have the following string
str = {'SRm40_' 'SRp5_'}
I want to read the numbers from str and include the m for a minus.
my desired Output would look like this
numbers = [-40 5]
I have tried the sscanf and regexp function but i dont seem to get it working
sscanf returns this
[numbers,~,err] = sscanf(string(str(1)),'%*5d')
err = 'Matching failure in format.'
So it cant read the the string because the first location has the 'E'.
If someone has a idea how to solve this, dont hesitate to answer :)
Have a great day
  4 Comments
Andrew McCauley
Andrew McCauley on 20 Jul 2022
Edited: Andrew McCauley on 20 Jul 2022
In loop form in case needed:
str = {'SRm40_' 'SRp5_'};
numbers = zeros(1, length(str));
for countString = 1:length(str)
numbers(countString) = str2num(str{countString}(4:end-1));
if strcmp(str{countString}(3), 'm')
numbers(countString)=-numbers(countString);
end
end
Lukas Ehrler
Lukas Ehrler on 20 Jul 2022
thanks a lot for the quick answer!!

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 20 Jul 2022
Another approach:
str = {'SRm40_','SRp5_'};
vec = str2double(regexprep(str,{'[A-Z_]+','m','p'},{'','-','+'}))
vec = 1×2
-40 5

More Answers (1)

Steven Lord
Steven Lord on 20 Jul 2022
Yet another approach:
str = {'SRm40_','SRp5_'};
str = replace(str, 'm', '-'); % Handle negative numbers
str = replace(str, 'p', '+'); % Handle positive numbers
d = cellfun(@(x) sscanf(x, 'SR%d_'), str) % sscanf requires its first input to be scalar
d = 1×2
-40 5

Categories

Find more on Characters and Strings in Help Center and File Exchange

Tags

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!