gpt4 book ai didi

c# - 在 C# 中使用 Regex 比较两个不同的文件夹

转载 作者:行者123 更新时间:2023-12-04 01:04:01 24 4
gpt4 key购买 nike

我想比较一个文件是否在两个不同的文件夹中。

var reg = new Regex(@"TC__\d{3,4}_8exp$");
var reg1 = new Regex(@"TC_\d{3,4}$");

var FileNames_List_Jetzt_Dateien = Directory.GetFiles(@"PATH2", "*.html")
.Where(path => reg.IsMatch(Path.GetFileNameWithoutExtension(path)))
.Select(Folder_Jetzt_Dateien =>
Path.GetFileNameWithoutExtension(Folder_Jetzt_Dateien));

从这个我得到列表:

TC__6493_8exp
TC__6494_8exp
TC__6495_8exp...

来自这个:

var TEST_FÄLLE = Directory.GetFiles(@"PATH2", "*.exp")
.Where(path => reg1.IsMatch(Path.GetFileNameWithoutExtension(path)))
.Select(Folder_Jetzt_Dateien =>
Path.GetFileNameWithoutExtension(Folder_Jetzt_Dateien));

我正在获取列表:

TC_6493
TC_6494
TC_6495...

对我来说,TC__6493_8expTC_6493 相同。如何对这两个具有相同元素的列表使用相交

最佳答案

这是一种使用正则表达式编写自定义比较器的方法:

public static Regex rx = new Regex(@"^(TC_)_?(\d+).*", RegexOptions.Compiled);
public class FilePathComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return rx.Replace(x, "$1$2") == rx.Replace(y, "$1$2");
}
public int GetHashCode(string s)
{
return rx.Replace(s,"$1$2").GetHashCode();
}
}

在后面的代码中,直接使用

var intersected = FileNames_List_Jetzt_Dateien.Intersect(TEST_FÄLLE, new FilePathComparer());

参见 C# demoregex demo .

^(TC_)_?(\d+).* 正则表达式匹配

  • ^ - 字符串的开始
  • (TC_) - 第 1 组 ($1):TC_
  • _? - 可选的下划线
  • (\d+) - 第 2 组 ($2):一个或多个数字
  • .* - 字符串的其余部分。

关于c# - 在 C# 中使用 Regex 比较两个不同的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67105781/

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