使用TRegEx在Delphi中创建正则表达式

Gig*_*bit 5 regex delphi

我希望在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)

不幸的是,这似乎不起作用.

Dav*_*nan 5

你可能也想要一个标志,以允许负数.这应该做.

[-+]?[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.