c# - 在 C# 中使用 Regex 比较两个不同的文件夹
问题描述
我想比较一个文件是否在两个不同的文件夹中。
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_8exp与TC_6493相同。如何对这两个具有相同元素的列表使用相交?
解决方案
您可以编写自定义比较器并将其传递给Intersect
方法
using System.Collections.Generic;
class FileComparer : IEqualityComparer<string>
{
const string ext = "_exp8";
public bool Equals(string left, string right)
{
if (left.EndsWith(ext) && !right.EndsWith(ext))
{
return StripExt(left) == right;
}
else if (right.EndsWith(ext))
{
return left == StripExt(right);
}
return left == right;
}
private static string StripExt(string s)
=> s.Substring(0, s.Length - ext.Length);
public int GetHashCode(string s)
{
if (s.EndsWith(ext))
{
return StripExt(s).GetHashCode();
}
else
{
return s.GetHashCode();
}
}
}
using System;
using System.Linq;
var files1 = new string[] { "1", "2", "3" };
var files2 = new string[] { "1_ext", "2_exp8", "3_exp8" };
var a = files1.Intersect(files2, new FileComparer());
var res = string.Join(", ", a);
Console.WriteLine(res);
推荐阅读
- selenium - 单击事件在 Catalina OS 上的 Safaridriver 中不起作用,而在 Firefox 和 chrome 上同样起作用
- python - 使用 ElementTree find() 和命名空间查找属性值
- kotlin - Kotlin/Native - 如何使用 C 库和 Klib 文件?
- flutter - flutter - 通过状态(提供者/消费者)更新 TextField/TextEditingController
- docker - 如何确定 Redis 攻击源?
- arrays - 如何加载子表单中的所有字段以成为 Ms Access VBA 中 Json 字符串的一部分
- api - Microsoft Graph API:未在邮箱通知中收到新消息
- sql - 合计加减 14 天窗口
- linux - 收到以下错误:尝试 SSH 时权限被拒绝(公钥)
- machine-learning - 来自本地二进制模式直方图的特征?