在MATLAB中从字符串中提取数字

cod*_*ude 1 matlab scanf

我正在使用sscanf从字符串中提取数字.字符串通常采用以下形式:

'44 ppm'
'10 gallons'
'23.4 inches'
Run Code Online (Sandbox Code Playgroud)

但有时他们的形式是:

'<1 ppm'
Run Code Online (Sandbox Code Playgroud)

如果我使用以下代码:

x = sscanf('1 ppm','%f')    
Run Code Online (Sandbox Code Playgroud)

我得到了一个输出

1
Run Code Online (Sandbox Code Playgroud)

但是,如果我在前面添加一个小于标志:

x = sscanf('<1 ppm','%f')
Run Code Online (Sandbox Code Playgroud)

我明白了:

[]
Run Code Online (Sandbox Code Playgroud)

我怎么能写这个代码所以这实际上产生了一个数字?我不确定它应该打印的数字......但是我们只是说它应该打印1.

P0W*_*P0W 5

你可以使用regexp:

s= '<1 ppm';
x=regexp(s, '.*?(\d+(\.\d+)*)', 'tokens' )

x{1}
Run Code Online (Sandbox Code Playgroud)

演示:

>> s= {'44 ppm', '10 gallons', '23.4 inches', '<1 ppm' } ;
>> x = regexp(s, '.*?(\d+(\.\d+)*)', 'tokens' );
>> cellfun( @(x) disp(x{1}), x )  % Demo for all
    '44'

    '10'

    '23.4'

    '1'
Run Code Online (Sandbox Code Playgroud)