Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中浮点数的Regexp等价_Matlab - Fatal编程技术网

matlab中浮点数的Regexp等价

matlab中浮点数的Regexp等价,matlab,Matlab,我想知道regexp是如何用于浮点数的,或者是否有其他函数可以实现这一点 例如,下面返回的是{'2','5'},而不是{'2.5'} nums= regexp('2.5','\d+','match') 正则表达式是用于低级文本解析的工具,它们没有数字数据类型的概念。如果你想解析小数,你需要考虑什么字符组成一个十进制数,并设计一个ReGEXP来显式匹配所有这些字符。 您的示例只返回'2'和'5',因为您的模式只匹配数字字符(\d)。要处理十进制数,您需要在模式中显式地包含。以下内容将匹配后跟0或

我想知道
regexp
是如何用于浮点数的,或者是否有其他函数可以实现这一点

例如,下面返回的是
{'2','5'}
,而不是
{'2.5'}

nums= regexp('2.5','\d+','match')

正则表达式是用于低级文本解析的工具,它们没有数字数据类型的概念。如果你想解析小数,你需要考虑什么字符组成一个十进制数,并设计一个ReGEXP来显式匹配所有这些字符。 您的示例只返回
'2'
'5'
,因为您的模式只匹配数字字符(
\d
)。要处理十进制数,您需要在模式中显式地包含
。以下内容将匹配后跟0或1个基数点的任意数字和后跟0或多个基数点的数字

regexp('2.5', '\d+\.?\d*', 'match')
这假设您总是有一个前导数字(即不是
'.5'

另一方面,您可以考虑使用类似或替代的方法来解析字符串,因为它们知道不同的数字数据类型,所以比自定义正则表达式更健壮。

C = textscan('2.5', '%f');
C = sscanf('2.5', '%f');
如果字符串仅包含此浮点数,则可以使用
str2double

val = str2double('2.5');

@Suever答案已经被接受,无论如何这里有一个更完整的答案,它应该接受各种浮点语法(默认情况下包括NaN和+/-Inf):


或者,假设字符串只包含浮点值。非常感谢@Suever
regexp('2.5','\d+\.?\d*,'match')
工作得很精确!
% Regular expression for capturing a double value
function [s] = cdouble(supportPositiveInfinity, supportNegativeInfinity, 
supportNotANumber)
%[
    if (nargin < 3), supportNotANumber = true; end
    if (nargin < 2), supportNegativeInfinity = true; end
    if (nargin < 1), supportPositiveInfinity = true; end

    % A double
    s = '[+\-]?(?:(?:\d+\.\d*)|(?:\.\d+)|(?:\d+))(?:[eE][+\-]?\d+)?'; %% This means a numeric double

    % Extra for nan or [+/-]inf
    extra = '';
    if (supportNotANumber), extra = ['nan|' extra]; end
    if (supportNegativeInfinity), extra = ['-inf|' extra]; end
    if (supportPositiveInfinity), extra = ['inf|\+inf|' extra]; end

    % Adding capture
    if (~isempty(extra))
        s = ['((?i)(?:', extra, s, '))']; % (?i) => Locally case-insensitive for captured group
    else
        s = ['(', s, ')'];
    end    
%]
end
>> regexp('Hello 1.235 how .2e-7 are INF you +.7 doing ?', cdouble(), 'match')

ans = 

    '1.235'    '.2e-7'    'INF'    '+.7'