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

时间:2011-12-24 17:02:55

标签: c# regex

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

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

我想将其转换为:

c:\Users\User\document.txt

在正则表达式中有一种简单的方法吗?

5 个答案:

答案 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)

如果您只需要从文件路径中删除最后一个文件夹名称,那么我认为使用内置FileInfoDirectoryInfoPath.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