我希望在Delphi XE中创建一个正则表达式,它将匹配一个后跟一个小数点的数字,后跟(基本上)无限数量的数字.
有效示例:
2.334
150.2
0.23
3
Run Code Online (Sandbox Code Playgroud)
示例无效:
3..42
4-2.3
e5.64
3 145
Run Code Online (Sandbox Code Playgroud)
小数点可以是可选的,整数也可以.
如何使用TRegEx在Delphi中进行此操作?
编辑:
这是我到目前为止:
enter function CheckCoefficientBoxesValidInput(InputtedTerm : TEdit) : boolean;
var
RegularExpression : TRegEx;
Match : TMatch;
begin
RegularExpression.Create('[-+]?[0-9]*\.?[0-9]+');
Match := RegularExpression.Match(InputtedTerm.Text);
if Match.Success then
begin
ShowMessage('Success.');
end;
end;
Run Code Online (Sandbox Code Playgroud)
编辑2:
试试@ DavidHeffernan的代码:
Function CheckCoefficientBoxesValidInput(InputtedTerm : TEdit) : boolean;
var
RegularExpression : TRegEx;
Match : TMatch;
begin
CheckCoefficientBoxesValidInput := true;
if not RegularExpression.IsMatch(InputtedTerm.Text, '[-+]?[0-9]*\.?[0-9]+') then
CheckCoefficientBoxesValidInput := false;
end;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用.
你可能也想要一个标志,以允许负数.这应该做.
[-+]?[0-9]*\.?[0-9]+
这不会识别科学记数法,但是你没有要求它.True如果可以在输入文本内的任何位置找到模式,则返回此选项.我不知道你的全部要求,但我想你想要匹配整个输入字符串.使用^并$开始和行尾锚这一点.也许你想要允许围绕值的空格:
^\s*[-+]?[0-9]*\.?[0-9]+\s*$
测试这样的匹配:
TRegEx.IsMatch(Input, '^\s*[-+]?[0-9]*\.?[0-9]+\s*$')
Run Code Online (Sandbox Code Playgroud)
示范:
{$APPTYPE CONSOLE}
uses
System.RegularExpressions;
procedure Check(const Input: string);
begin
Writeln(Input, ' ', TRegEx.IsMatch(Input, '^\s*[-+]?[0-9]*\.?[0-9]+\s*$'));
end;
begin
Check('2.334');
Check('150.2');
Check('0.23');
Check('3');
Check('3..42');
Check('4-2.3');
Check('e5.64');
Check('3 145');
end.
Run Code Online (Sandbox Code Playgroud)
产量
2.334 TRUE 150.2 TRUE 0.23 TRUE 3 TRUE 3..42 FALSE 4-2.3 FALSE e5.64 FALSE 3 145 FALSE
Delphi正则表达式的引用如下:http://www.regular-expressions.info/
Delphi正则表达式类的文档:http: //docwiki.embarcadero.com/Libraries/en/System.RegularExpressions.TRegEx
打电话会容易得多TryStrToFloat.