使用正则表达式创建新的文件路径

本文关键字:文件 路径 创建 正则表达式 | 更新日期: 2023-09-27 18:18:41

我试图在regex中创建一个新的文件路径,以便移动一些文件。假设我有路径:

c:'Users'User'Documents'document.txt

我想把它转换成:

c:'Users'User'document.txt

是否有一个简单的方法来做到这一点在正则表达式?

使用正则表达式创建新的文件路径

如果您需要的只是从文件路径中删除最后一个文件夹名称,那么我认为使用内置的FileInfo, DirectoryInfo和path会更容易。组合而不是正则表达式:

var fileInfo = new FileInfo(@"c:'Users'User'Documents'document.txt");
if (fileInfo.Directory.Parent != null)
{
    // this will give you "c:'Users'User'document.txt"
    var newPath = Path.Combine(fileInfo.Directory.Parent.FullName, fileInfo.Name);
}
else
{
    // there is no parent folder
}

一种Perl正则表达式风格的方法。它删除路径中的最后一个目录:

s/[^'']+''([^'']*)$/$1/

解释:

s/.../.../            # Substitute command.
[^'']+                # Any chars until '''
''                    # A back-slash.
([^'']*)              # Any chars until '''
$                     # End-of-line (zero-width)
$1                    # Substitute all characters matched in previous expression with expression between parentheses.

你可以试一试,虽然这是一个Java代码

String original_path = "c:''Users''User''Documents''document.txt";
String temp_path =  original_path.substring(0,original_path.lastIndexOf("''"));
String temp_path_1 = temp_path.substring(0,temp_path.lastIndexOf("''"));
String temp_path_2 = original_path.substring(original_path.lastIndexOf("''")+1,original_path.length());
System.out.println(temp_path_1 +"''" + temp_path_2);

您提到每次转换都是相同的,因此,依靠regexp来完成可以使用String manipulations完成的事情并不总是一个好的做法。

何不同时使用pathStr.Split('''')Take(length - 2)String.Join呢?

使用Regex替换方法。找到你要找的内容,然后将其替换为空(string.empty),下面是c#代码:

string directory = @"c:'Users'User'Documents'document.txt";
string pattern   = @"(Documents'')";
Console.WriteLine(  Regex.Replace(directory, pattern, string.Empty ) );
// Outputs 
// c:'Users'User'document.txt