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'