使用 linqpad、C# 和 regex 将文件中的特定文本替换为其自己的文件名

问题描述 投票:0回答:1

不幸的是,目前在 Windows 10 32 位上运行。我正在编辑提示表以匹配文件名已更改的 mp3 和 m4b 备份。我正在寻找一种可以轻松实现该过程自动化的方法。因为我通常命名提示表以匹配配对音频文件的名称,所以我认为最简单的方法就是获取它自己的文件名(希望没有文件扩展名)。我有正则表达式来选择我想要替换的文本,在记事本++和其他几个应用程序中也可以正常工作。遗憾的是,我还没有找到一个预构建的查找和替换解决方案,该解决方案具有正在作为变量进行编辑的文件自己的名称。因此,我花了一些时间进行搜索,发现最有希望的东西是在另一篇文章中(在替换文件中的文本时使用文件名作为变量)。尽管我认为我犯了一个菜鸟错误,但我对 c# 的经验为零。也是第一次使用linqpad。

这是我所拥有的,但由于某种原因它似乎被正则表达式噎住了。

cue 文件中的示例行:

文件“阿尔弗雷德·米诺亚.1998 - 撒哈拉动物 - 纪录片.m4b”MP4

要更换的部分:

阿尔弗雷德·米诺亚 - 撒哈拉动物 - 纪录片

m4b 和cue 文件的新名称:

阿尔弗雷德·米诺亚 - 撒哈拉动物 - Documentary.cue 阿尔弗雷德·米诺亚 - 撒哈拉动物 - 纪录片.m4b

目标是将提示文件中的文本“Alfred Minoa.1998 - Animals of The Sahara - Documentary”替换为提示文件的名称减去“.cue”文件扩展名。

    var files = new DirectoryInfo(@"D:\[ AudioBooks ]\[ Completed ]\").GetFiles("*.cue", SearchOption.AllDirectories);
    foreach(var fileInfo in files)
    {
        var text = File.ReadAllText(fileInfo.FullName);
        text = Regex.Replace(text, @"(?<=FILE ").+?(?=\....")", fileInfo.Name); // Replace "pattern" with filename
        File.WriteAllText(fileInfo.FullName, text);
    }

如有任何帮助,我们将不胜感激。也欢迎任何其他实现相同目标的想法。

c# regex linqpad
1个回答
0
投票

不知道您的搜索字符串想要做什么,但您可以尝试一下。

string searchStr   = @"FILE \"".+?\""" ;
string replacement = @$"FILE ""{System.IO.Path.GetFileNameWithoutExtension(fileInfo.Name)}""" ;
text = Regex.Replace(text, searchStr, replacement);

正则表达式语法有时因语言而异,但看到您使用的是 LinqPad,您可以使用 Ctrl-Shift-F1 来测试 C# 中正则表达式的搜索部分(但不是替换)

© www.soinside.com 2019 - 2024. All rights reserved.