How to use regex to obtain double values?

45 views (last 30 days)
I have an array of strings which contains some units. I have attahced the array.
unq = ["10 lux";"10lux";"15";"15.0";"15.5 Lux";"15luX";"15lux";"20lux";"36lux";"42lux";"9lux"]
They are put in different format on different days. So, I get 11 unique entries. I used the following code only to keep the numeric part.
trimData = strtrim(unq);
regexData = regexp(trimData,'\d*','Match');
cleanedData = cell(numel(unq),1);
for kk = 1:numel(unq)
if length(regexData{kk}) >= 1
cleanedData{kk} = regexData{kk}(1);
cleanedData = str2double(string(cleanedData));
I got
cleanedData = [10;10;15;15;15;15;15;20;36;42;9]
I am not getting 15.5 in the resulting array. How do get the numbers in which the digits after decimal place is not '0'? How do I write a regular expression for that?

Accepted Answer

Walter Roberson
Walter Roberson on 29 Jul 2022
Edited: Walter Roberson on 29 Jul 2022
Extending to the possibility of fraction values that start with decimal point (with no leading zero), and extending to support negative values
But not extending to exponential format:
unq = ["10 lux";"-10lux";"15";"15.0";"15.5 Lux";"15luX";"15lux";"20lux";"36lux";"42lux";".9lux"]
unq = 11×1 string array
"10 lux" "-10lux" "15" "15.0" "15.5 Lux" "15luX" "15lux" "20lux" "36lux" "42lux" ".9lux"
regexData = regexp(unq, '(-?\d+(\.\d*)?)|(-?\.\d+)', 'match', 'once')
regexData = 11×1 string array
"10" "-10" "15" "15.0" "15.5" "15" "15" "20" "36" "42" ".9"
  1 Comment
Struggling in MATLAB
Struggling in MATLAB on 29 Jul 2022
Exactly what I needed. Thanks a lot, Walter!

Sign in to comment.

More Answers (0)


Find more on Data Type Conversion 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!