how can I extract the numbers from a character array value of '4.64 km' and return them as 4.64?

 Akzeptierte Antwort

Star Strider
Star Strider am 18 Okt. 2022
Bearbeitet: Star Strider am 18 Okt. 2022

2 Stimmen

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 Kommentare

Walter Roberson
Walter Roberson am 19 Okt. 2022
-?(\d+\.\d*¦\.\d+)
Star Strider
Star Strider am 19 Okt. 2022
Noted!
I had forgotten that syntax and couldn’t find it in the documentation.
Walter Roberson
Walter Roberson am 19 Okt. 2022
darn I forgot the case of no period
Star Strider
Star Strider am 19 Okt. 2022
I saw that and wondered, however I did not change my answer, and just learned from the important parts of your syntax.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Les Beckham
Les Beckham am 18 Okt. 2022

1 Stimme

Or, in one line of code:
s = '4.64 km';
num = sscanf(s, '%f') % num will be a double
num = 4.6400

1 Kommentar

Walter Roberson
Walter Roberson am 18 Okt. 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.

Melden Sie sich an, um zu kommentieren.

David Hill
David Hill am 18 Okt. 2022

0 Stimmen

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

Kategorien

Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange

Produkte

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by