在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位数字而不是我需要的数字。
答案 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);