我正在尝试在regex中创建一个新的文件路径,以便移动一些文件。说我有路径:
c:\Users\User\Documents\document.txt
我想将其转换为:
c:\Users\User\document.txt
在正则表达式中有一种简单的方法吗?
答案 0 :(得分:1)
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.
答案 1 :(得分:1)
如果您只需要从文件路径中删除最后一个文件夹名称,那么我认为使用内置FileInfo
,DirectoryInfo
和Path.Combine而不是常规更容易表达式:
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
}
答案 2 :(得分:0)
虽然它是一个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
完成的事情并不总是一个好习惯。
答案 3 :(得分:0)
为什么不pathStr.Split('\\')
,Take(length - 2)
和String.Join
的某种组合?
答案 4 :(得分:0)
使用正则表达式replace方法。找到你要找的东西,然后用零替换它(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