gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:09:05 26 4
gpt4 key购买 nike

我希望在 Delphi XE 中创建一个正则表达式,它将匹配一个数字,后跟一个小数点,后跟(本质上)无限数量的数字。

有效示例:

2.334
150.2
0.23
3

无效示例:

3..42
4-2.3
e5.64
3 145

小数点可以是可选的,整数也可以。

如何使用 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;

编辑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;

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

最佳答案

您可能还想考虑符号,以允许负数。这应该可以。

[-+]?[0-9]*\.?[0-9]+

This won't recognise scientific notation but then you did not ask for that. This returns True if the pattern can be found anywhere inside the input text. I don't know your full requirements, but I guess you want to match against the entire input string. Use the ^ and $ start and end of line anchors for that. And perhaps you want to allow whitespace around the value too:

^\s*[-+]?[0-9]*\.?[0-9]+\s*$

Test for a match like this:

TRegEx.IsMatch(Input, '^\s*[-+]?[0-9]*\.?[0-9]+\s*$')

演示:

{$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.

输出

2.334 TRUE150.2 TRUE0.23 TRUE3 TRUE3..42 FALSE4-2.3 FALSEe5.64 FALSE3 145 FALSE

Delphi正则表达式的引用在这里:http://www.regular-expressions.info/

以及 Delphi 正则表达式类的文档: http://docwiki.embarcadero.com/Libraries/en/System.RegularExpressions.TRegEx

<小时/>

调用 TryStrToFloat 会容易得多。

关于regex - 使用 TRegEx 在 Delphi 中创建正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com