Extracting number from a string

 採用された回答

Stephen23
Stephen23 2016 年 12 月 16 日

6 投票

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

2 件のコメント

Anh Tran
Anh Tran 2016 年 12 月 16 日
Thanks for the great answer! But can you also explain the code for me?
Stephen23
Stephen23 2016 年 12 月 17 日
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 日

3 投票

result = 'M1' - '0';
result(result < 0 | result > 9) = [];

1 件のコメント

Anh Tran
Anh Tran 2016 年 12 月 16 日
Thanks for the great answer! But can you also explain the code for me?

サインインしてコメントする。

Image Analyst
Image Analyst 2016 年 12 月 16 日

1 投票

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)

1 件のコメント

Anh Tran
Anh Tran 2016 年 12 月 16 日
Thanks! That's a great explanation.

サインインしてコメントする。

Pierre Harouimi
Pierre Harouimi 2022 年 11 月 2 日

1 投票

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

2 件のコメント

Image Analyst
Image Analyst 2022 年 11 月 2 日
編集済み: Image Analyst 2022 年 11 月 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.
Stephen23
Stephen23 2022 年 11 月 3 日
編集済み: Stephen23 2022 年 11 月 3 日
"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 ExchangeCharacters and Strings についてさらに検索

製品

質問済み:

2016 年 12 月 16 日

編集済み:

2022 年 11 月 3 日

Community Treasure Hunt

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

Start Hunting!

Translated by