从Matlab字符串中提取数字

时间:2017-03-26 10:05:57

标签: regex matlab

在Matlab中,假设我有以下字符串:

mystring = 'sdfkdsgoeskjgk elkr jtk34s ;3k54352642 643l j3kf p35j535';

我想将其中的所有数字提取到一个向量中,使得每个数字都是它自己的数字,所以输出应该是这样的:

output = [3 4 3 5 4 3 5 2 6 4 2....]

我尝试使用此代码和正则表达式执行此操作:

mystring = 'sdfkdsgoeskjgk elkr jtk34s ;3k54352642 643l j3kf p35j535';
digits = regexp(mystring, '[0-9]');
disp(digits);

但它给了我一些奇怪的4位数字而不是我需要的数字。

2 个答案:

答案 0 :(得分:4)

默认情况下,regexp的输出位于每个匹配中第一个字符的索引中,这就是为什么数字与字符串中的数字相同的原因。您将要使用regexp的输出然后索引到初始字符串以获取数字本身

digits = mystring(regexp(mystring, '[0-9]'));

您仍然需要将这些字符转换为数字,以便您可以减去'0'来执行此转换

digits = mystring(regexp(mystring, '[0-9]')) - '0';

或者,您可以指定'match'的{​​{1}}输入以返回实际匹配的字符串本身。这将返回一个单元格数组,然后我们可以使用regexp

将其转换为数字数组
str2double

答案 1 :(得分:1)

我使用转置而不是任何其他现有函数将字符串转换为数组。

mystring = 'sdfkdsgoeskjgk elkr jtk34s ;3k54352642 643l j3kf p35j535';
digits   = regexp(mystring, '[0-9]');

array    = double(mystring(digits)')'-48;    % array of doubles
disp(array);