Extract numbers from char type

36 次查看(过去 30 天)
how can I extract the numbers from a character array value of '4.64 km' and return them as 4.64?

采纳的回答

Star Strider
Star Strider 2022-10-18
编辑:Star Strider 2022-10-18
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 个评论
Walter Roberson
Walter Roberson 2022-10-19
darn I forgot the case of no period
Star Strider
Star Strider 2022-10-19
I saw that and wondered, however I did not change my answer, and just learned from the important parts of your syntax.

请先登录,再进行评论。

更多回答(2 个)

Les Beckham
Les Beckham 2022-10-18
Or, in one line of code:
s = '4.64 km';
num = sscanf(s, '%f') % num will be a double
num = 4.6400
  1 个评论
Walter Roberson
Walter Roberson 2022-10-18
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.

请先登录,再进行评论。


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

类别

Help CenterFile Exchange 中查找有关 Text Data Preparation 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by