我的计算机上有一些文件。示例:
- [组] 姓名年份 ' [Class2B] Hans 2011
- Group_Name_Year“Class2B_Hans_2011”
- 名称-年份-主题“Hans-2011-Wikipedia”
这些是我的学生的文字文件。
我希望正则表达式分析这些文件名并尝试不同的模式以从文件名中获取所有信息。之后,我想收集这些并将 ihm 放入 List<> 例如。
目前我正在使用这种代码。
public static string? GetGroup(string filename)
{
if (fileName == null)
return null;
if (fileName.Contains("Class2B") || ("Class 2B"))
{
string result = "2B";
return result.ToString();
}
else if (fileName.Contains("Class1A") || fileName.Contains("Class 1A") || fileName.Contains("1A"))
{
string result = "1A";
return result.ToString();
}
else
{
string result = "Default";
return result.ToString();
}
}
正则表达式的问题是文件名可能彼此非常不同。我有时间制作大约 50 个图案。但我需要一些示例代码,我可以检查所有模式以及模式是否匹配而不会丢失任何重要的变量。有些文件不包含组信息。有些带有空格下划线。有些有点。
PPS:我尝试过神经网络来帮助我分析文件名。但我技术不够。
希望你们中的一些人可以帮助我。
我确实尝试过正则表达式,但没有找到有效的解决方案。我确实尝试过 if 语句和神经网络。
正则表达式总是在 [Group]Fischer-2011 等示例中取得良好进展,但当我检查 Hans-Wikipedia-2012 时,它出现了错误。文件名不同的原因。
至少所有文件名都由“名称”和日期(4 位数字)组成。
if 语句是我当前的选择,因为它们搜索更深入且灵活。 问题是名称或主题像 Hans-Klaus-Energy-Class2B-2011 那样被分割。
最佳答案
要获取组,您可以使用正则表达式,例如
(Class[._\-\s]?([0-9][A-Z]))
即“类”后跟零或一个分隔符,然后是数字和字母。使用一个捕获组捕获整个“2B 类”,使用一个捕获组仅获取“2B”部分。
要查找年份,您可以使用 (20[0-9][0-9])
之类的内容,假设所有年份都在 1999 年到 2099 年之间。
名称和主题可能很难提取,除非您有一个列表,或者它们以一致的顺序出现。
要处理不同的分隔符,您可以尝试通过用单个分隔符替换所有可能的分隔符来标准化字符串。
您还可以从字符串中删除已识别的所有内容,例如组和年份,然后使用一个或多个分隔符将其拆分为多个部分,并使用顺序来识别其他所有内容。
例如,给定“Class_2A Hans-Wikipedia-2012”,使用正则表达式查找类(class)和年份并将其删除 ->“Hans-Wikipedia-”。分成几部分,删除空条目 ->“汉斯”,“维基百科”。大概第一个是名称,第二个是主题。
或者您可以雇用一名学生来手动修复现有的提交内容,并要求将来的提交内容遵循指定的格式,并使用正则表达式自动验证。
关于c# - 有效使用正则表达式处理文件名的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77570000/