如何使用regex以另一种格式替换相同名称的文件

本文关键字:文件 替换 regex 何使用 另一种 格式 | 更新日期: 2023-09-27 17:59:47

我是编程新手,对regex不太了解。我希望加载/读取csv文件,然后使用与csv文件相同的名称保存在txt文件中。我将举一个例子。

D:'Project'File'xxx.csv

在我加载这个文件后,我想获得名称"xxx"并将其保存在一个txt文件中:

D:'Project'File'xxx.txt

或者可能在另一个文件夹中,例如:

D:'Project'Specifications'PersonInfo.csv

保存到

D:'Project'DataBank'PersonInfo.txt

如何使用regex以另一种格式替换相同名称的文件

这可以通过多种方式实现。

也许您缺少的是System.IO.Path类的知识(这里是MSDN的文章)。

例如,更改扩展可以这样完成:

string originalFilePath = @"D:'Project'File'xxx.csv";
string newFilePath = Path.ChangeExtension(originalFilePath, ".txt");

注意:您需要明确扩展名的前导点(".")。

这里有一些"路径代数"的乐趣,你可以结合起来创造你想要的效果:

string originalFilePath = @"D:'Project'File'xxx.csv";
string thePath = Path.GetDirectoryName(originalFilePath);
// will be @"D:'Project'File"
string filename = Path.GetFileName(originalFilePath);
// will be "xxx.csv"
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(originalFilePath);
// will be "xxx"
string recombinedFilePath = Path.Combine( @"D:'OtherFolder", "somethingElse.txt" );
// will be @"D:'OtherFolder'somethingElse.txt"

注意Path.Combine知道如何处理多余/缺失的前导/尾随反斜杠。

例如:

  • Path.Combine(@"D:'MyFolder1", @"MyFolder2'MyFile.txt")
  • Path.Combine(@"D:'MyFolder1'", @"MyFolder2'MyFile.txt")
  • Path.Combine(@"D:'MyFolder1", @"'MyFolder2'MyFile.txt")
  • Path.Combine(@"D:'MyFolder1'", @"'MyFolder2'MyFile.txt")

将产生相同的结果:@"D:'MyFolder1'MyFolder2'MyFile.txt"

您不需要regex,因为.NET提供了一个System.IO.Path类来专门处理文件名操作。

例如,要用.txt替换.csv,可以使用以下调用:

var csvPath = @"D:'Project'File'xxx.csv";
var txtPath = Path.Combine(
    Path.GetDirectoryName(csvPath)
,   Path.GetFileNameWithoutExtension(csvPath)+".txt"
);

您可以使用类似的技巧来替换文件路径的其他部分。以下是如何更改顶部目录的名称:

var csvPath = @"D:'Project'Specifications'xxx.csv";
var txtPath = Path.Combine(
    Path.GetDirectoryName(Path.GetDirectoryName(csvPath))
,   "DataBank"
,   Path.GetFileNameWithoutExtension(csvPath)+".txt"
);

您不需要Regex。

您可以使用Path.GetFileName或Path.GetFileNameWithoutExtension:

string fileName = Path.GetFileNameWithoutExtension("D:'Project'Specifications'PersonInfo.csv");

如果你想使用正则表达式,这个正则表达式将得到你想要的部分:

([^'']+)'.[^.'']+$

第一组(括号中)匹配一个或多个不是反斜杠的字符(尽可能多)。然后需要一个文字点。然后是一个或多个不是点或反斜杠的字符(尽可能多),然后是字符串的末尾。小组捕捉到了想要的部分。