Extract numbers from char type

35 vues (au cours des 30 derniers jours)
Yoseph
Yoseph le 18 Oct 2022
Commenté : Star Strider le 19 Oct 2022
how can I extract the numbers from a character array value of '4.64 km' and return them as 4.64?

Réponse acceptée

Star Strider
Star Strider le 18 Oct 2022
Modifié(e) : Star Strider le 18 Oct 2022
Probably the easiest way —
s = '4.64 km';
c = regexp(s, '\d*\.\d*|\d*', 'match')
c = 1×1 cell array
{'4.64'}
n = str2double(c)
n = 4.6400
EDIT — (18 Oct 2022 at 19:38)
In the event any of the numbers are negative —
s = '4.64 -42 2 -3.14 km';
c = regexp(s, '(\-\d*|\d*)\.\d*|(\-\d*|\d*)', 'match')
c = 1×4 cell array
{'4.64'} {'-42'} {'2'} {'-3.14'}
n = str2double(c)
n = 1×4
4.6400 -42.0000 2.0000 -3.1400
.
  4 commentaires
Walter Roberson
Walter Roberson le 19 Oct 2022
darn I forgot the case of no period
Star Strider
Star Strider le 19 Oct 2022
I saw that and wondered, however I did not change my answer, and just learned from the important parts of your syntax.

Connectez-vous pour commenter.

Plus de réponses (2)

Les Beckham
Les Beckham le 18 Oct 2022
Or, in one line of code:
s = '4.64 km';
num = sscanf(s, '%f') % num will be a double
num = 4.6400
  1 commentaire
Walter Roberson
Walter Roberson le 18 Oct 2022
Yes this works well when the number is at the beginning. You can also put literal text into the format if you expect an exact match.
The suggestions to use regexp to extract the text of the number work well when you need flexibility.
In cases where you have tables of text see textscan() which can be used on a character vector that has embedded newlines.

Connectez-vous pour commenter.


David Hill
David Hill le 18 Oct 2022
a='4.65 km';
r=regexp(a,'\d*[.]*\d*','match');
str2num(r{1})
ans = 4.6500

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by