我想从以下字符中读取数字2:
'mc_parameters.E_i = '2';'
到目前为止,数字周围的' '
使它变得一团糟,因为当我尝试使用sscanf
,textscan
和str2num
时,MATLAB看到的是
'mc_parameters.E_i = '2';'
并且它不会将最后一个';'
识别为字符串本身。
有什么想法吗?
答案 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
是从中提取数字的字符串。
此正则表达式将以下列任何一种形式查找并转换字符串中的所有数字:
注意:如果你只需要提取整数,一个简单的'[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