使用正则表达式创建新的文件路径
本文关键字:文件 路径 创建 正则表达式 | 更新日期: 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