德尔福多行正则表达式



我在Delphi中有一些非回归测试代码,可以调用外部差异工具。然后,我的代码加载差异结果,并应删除可接受的差异,例如比较结果中的日期。我正在尝试使用多行 TRegEx.Replace 来执行此操作,但没有找到匹配项......

https://regex101.com/r/QBZuws/2 显示了我想出的模式和一个示例测试差异文件。我需要删除 3 行匹配的"释义">

这是我的代码:

function FilterDiff(AText:string):string;
var
  LStr:string;
  Regex: TRegEx;
begin
  // AText:=StringReplace(AText,#13+#10,'n',[rfReplaceAll]); // doesn't help ...
  LStr := 'dd.dd.20dd dd:dd:dd'; // regex for date and time
  LStr := '@@.*@@n-'+LStr+'n+'+LStr; // regex for paragraphs to remove
  Regex := TRegEx.Create(LStr, [roMultiLine]);
  Result := Regex.Replace(AText,'');
end;
procedure TReportTest.NonRegression;
var
  LDiff : TStringList;
  // others removed for clarity
begin
  // removed section code that call an external tool and produces diff.txt file
  LDiff := TStringList.Create;
  LDiff.LoadFromFile('diff.txt');
  Status(FilterDiff(LDiff.Text)); // show the diffs in DUnit GUI for now
  LDiff.Free;
end;

此外,在跟踪TRegEx.替换到时

System.RegularExpressionsAPI.pcre_exec($4D72A50,nil,'--- '#$D#$A'+++ '#$D#$A'@@ -86 +86 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A'@@ -400 +400 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A,132,0,1024,$7D56800,300)
System.RegularExpressionsCore.TPerlRegEx.Match
System.RegularExpressionsCore.TPerlRegEx.ReplaceAll
System.RegularExpressions.TRegEx.Replace(???,???)
TestReportAuto.FilterDiff('--- '#$D#$A'+++ '#$D#$A'@@ -86 +86 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A'@@ -400 +400 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A)

我很惊讶地在调试器中看到每个换行符 #$D#$A 前后的引号,但它们看起来并不"真实"......还是他们?

由于您似乎对不同类型的换行符有疑问,我建议您调整正则表达式以使用R而不是n与Windows样式换行符(CR + LF(以及Unix样式换行符(LF(匹配

好吧,我只是注意到正则表达式中的仅匹配LF,而不是CR + LF,所以我添加了

AText:=StringReplace(AText,#13+#10,#10,[rfReplaceAll]); // n matches only LF !

在我的功能开始时,现在好多了...有时写下问题会有所帮助...

最新更新