我是编程新手,而且正则表达式不太好。我希望加载/读取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
答案 0 :(得分:2)
您不需要Regex。
您可以使用Path.GetFileName或Path.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)
如果你想使用正则表达式,这个正则表达式将得到你想要的部分:
([^\\]+)\.[^.\\]+$
第一组(在括号中)匹配一个或多个不是反斜杠的字符(尽可能多)。然后需要一个字面点。然后是一个或多个不是点或反斜杠的字符(尽可能多),然后是字符串的结尾。该小组捕获了想要的部分。