Extracting number from a string

 采纳的回答

Here are two very simple methods:
>> str = 'M1';
>> sscanf(str,'M%d')
ans = 1
>> str(2)-'0'
ans = 1

2 个评论

Thanks for the great answer! But can you also explain the code for me?
sscanf reads the numeric values in a string. Read its documentation to know how it works.
The second method subtracts the character code for the character '0' from the second character of the string. This is a simple way of converting digits into a vector of values.

请先登录,再进行评论。

更多回答(3 个)

José-Luis
José-Luis 2016-12-16
编辑:José-Luis 2016-12-16
result = 'M1' - '0';
result(result < 0 | result > 9) = [];

1 个评论

Thanks for the great answer! But can you also explain the code for me?

请先登录,再进行评论。

Here are two ways, depending on if you want the extracted "1" to be a character (string) or a number:
str = 'M1' % First define the string.
str1 = str(2) % Gives a character
dbl1 = str2double(str(2)) % Give a number (double)
Pierre Harouimi
Pierre Harouimi 2022-11-2

1 个投票

You can use pattern from R2020b:
numbers = str2double(extract(string, digitsPattern));

2 个评论

Example:
string = 'abc123def456789ghi'
string = 'abc123def456789ghi'
numbers = str2double(extract(string, digitsPattern))
numbers = 2×1
123 456789
It would be nice if they made a little wrapper function for that, since it's hard to remember. Something simple like
numbers = extractNumbers(string);
would be easier for most people I think, than having to know about digitsPattern, extract, str2double, and then having to nest them all together.
"Something simple like... would be easier for most people I think..."
The devil is in the details, because it really depends on what you define as a "number". Some users will want to match fractional digits (which probably means selecting for e.g. comma vs dot vs comma|dot), whereas others will want to match only integers and to treat commas/dots as non-numeric. Ditto exponent notation, NaNs, Infs, other bases, fixed-width numbers, various Unicode minus/plus signs, etc.
So it turns out to be not very simple at all, once the different "number" formats are considered. The user specifying a regular expression or MATLAB pattern is one way to give them that control, by making those choices explicit.

请先登录,再进行评论。

类别

在 帮助中心 和 File Exchange 中查找有关 Characters and Strings 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by