我在Delphi中有一些调用外部差异工具的非回归测试代码。然后我的代码加载差异结果,并应删除可接受的差异,例如比较结果中的日期。我尝试使用多行TRegEx.Replace进行此操作,但未找到匹配项...
https://regex101.com/r/QBZuws/2显示了我想出的模式和示例测试差异文件。我需要删除匹配的" pararaphs" 3行
这是我的代码:
function FilterDiff(AText:string):string;
var
LStr:string;
Regex: TRegEx;
begin
// AText:=StringReplace(AText,#13+#10,'\n',[rfReplaceAll]); // doesn't help ...
LStr := '\d\d.\d\d.20\d\d \d\d:\d\d:\d\d'; // 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.Replace到
时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之前和之后的引号,但是他们看起来并不真实" ......还是他们?
答案 0 :(得分:3)
由于您似乎遇到了各种换行符的问题,我建议您调整正则表达式以使用\R
而不是\n
来匹配Windows样式换行符(CR + LF)以及Unix风格的换行符(LF)。
答案 1 :(得分:-1)
好吧,我刚注意到正则表达式中的\ n仅匹配LF,而不是CR + LF,所以我添加了
AText:=StringReplace(AText,#13+#10,#10,[rfReplaceAll]); // \n matches only LF !
在我的功能开始时,它现在好多了...... 有时写下问题有助于......