如何使用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
这可以通过多种方式实现。
也许您缺少的是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");
如果你想使用正则表达式,这个正则表达式将得到你想要的部分:
([^'']+)'.[^.'']+$
第一组(括号中)匹配一个或多个不是反斜杠的字符(尽可能多)。然后需要一个文字点。然后是一个或多个不是点或反斜杠的字符(尽可能多),然后是字符串的末尾。小组捕捉到了想要的部分。