gpt4 book ai didi

regex - TRegex.Match 从不​​匹配空字符串

转载 作者:行者123 更新时间:2023-12-03 15:51:37 27 4
gpt4 key购买 nike

我正在处理 TStringList 中的多个字符串,并且想要跳过一些与特定正则表达式模式不匹配的行。因此我创建了一个 ^(?!\t\w+\t\w+) 的模式并尝试过

program P;
uses
System.SysUtils, System.Classes, System.RegularExpressions;
var
S: TStringList;
I: Integer;
begin
S := TStringList.Create;
try
//Test and empty string should be passed
S.Add('Test'); S.Add(''); S.Add(#9'Hello'#9'world%%');
I := 0;
while ((I < S.Count - 1) and TRegex.IsMatch(S[I], '^(?!\t\w+\t\w+)', [])) do
Inc(I);
Writeln(IntToStr(I) + ': ' + S[I]);
Readln;
finally
S.Free;
end;
end.

令人惊讶的是它打印出 1:因此匹配我的 StringList 中的空字符串,尽管它应该匹配模式。我可以通过添加 and S[I] <> '' 来捕获这种情况但我想知道我是否错过了任何正则表达式选项(或类似选项)来使用正则表达式正确处理空字符串。我必须在 IsMatch 函数中显式使用空 RegexOptions,如 roNotEmpty默认情况下使用 - 但这只允许我的模式匹配零长度。

我已经在 Delphi 10.1 中对此进行了测试。

最佳答案

这是一个known issue .

您可以按照问题注释中所述修改代码后重新编译单元。您所要做的就是显式地将 pas 文件添加到您的项目中,以使编译器重新编译它,而不是使用附带的 dcu。

关于regex - TRegex.Match 从不​​匹配空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40867487/

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