从包含''的字符串中读取数字

时间:2013-11-20 15:05:19

标签: string matlab

我想从以下字符中读取数字2:

'mc_parameters.E_i = '2';'

到目前为止,数字周围的' '使它变得一团糟,因为当我尝试使用sscanftextscanstr2num时,MATLAB看到的是

'mc_parameters.E_i = '2';'

并且它不会将最后一个';'识别为字符串本身。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

只需使用此功能:

myNum = str2num(myString);

有关str2num

的文档

修改

我很想知道还有什么要补充的东西:

myString = 'mc_parameters.E_i = '2';';
temp = sscanf(myString,['%[A-z.] %3c %d']);
extractNumberInString = temp(end); % Because last scanf is %d for double number.

也许您需要像这样转换myString来执行示例:

myString = 'mc_parameters.E_i = ''2'';';

编辑2

更好的解决方案是使用textscan因为使用%*,您可以跳过这样的字符:

test = textscan(myString,'%*[^''] %*c %d'); 
% Search until first ' and look for the white space and finish with the double number

答案 1 :(得分:0)

您已使用str2num

str = '2';

x = str2num(str) 

输出

x = 2;

答案 2 :(得分:0)

我不太明白你的意思,但这个单行程适用于我能想到的所有解释(然后是一些):

cellfun(@str2double, regexp(str, ...
    '[+-]?[0-9]+\.?[0-9]*(e|E|d|D)?[+-]?[0-9]*', 'match'));    

其中str是从中提取数字的字符串。

此正则表达式将以下列任何一种形式查找并转换字符串中的所有数字:

  • 2
  • 2.05
  • 21.05
  • -2.0755e-4
  • -0.0755D4
  • ...

注意:如果你只需要提取整数,一个简单的'[0-9]*'就足够了:)

示例:

>> format short e
>> f = @(str) cellfun(@str2double, regexp(str, '[+-]?[0-9]+\.?[0-9]*(e|E|d|D)?[+-]?[0-9]*', 'match'));
>> 
>> str = 'mc_parameters.E_i = ''2.04'';  +-8.4e-005';
>> f(str)
ans = 
    2.0400e+000    -8.400e-005

>> str = '2.18';
>> f(str)
ans = 
    2.1800e+000

>> str = '''2.21''; ''2..3e-4';
>> f(str)
ans = 
    2.2100e+000    2.0000e+000    3.0000e-004