Reading numbers from String
    6 views (last 30 days)
  
       Show older comments
    
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
 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
Accepted Answer
  Stephen23
      
      
 on 20 Jul 2022
        Another approach:
str = {'SRm40_','SRp5_'};
vec = str2double(regexprep(str,{'[A-Z_]+','m','p'},{'','-','+'}))
0 Comments
More Answers (1)
  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
0 Comments
See Also
Categories
				Find more on Characters and Strings in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


