如何使用正则表达式替换文件的相同名称,但使用其他格式?

时间:2014-04-24 14:43:59

标签: c# regex file save file-format

我是编程新手,而且正则表达式不太好。我希望加载/读取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

4 个答案:

答案 0 :(得分:2)

您不需要Regex。

您可以使用Path.GetFileNamePath.GetFileNameWithoutExtension

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

答案 1 :(得分:2)

你不需要正则表达式,因为.NET提供了一个System.IO.Path类来专门处理文件名操作。

例如,要将.csv替换为.txt,您可以使用此调用:

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"
);

答案 2 :(得分:2)

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

也许您缺少的是System.IO.Path班级(MSDN article here)的知识。

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

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"

答案 3 :(得分:1)

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

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

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