正则表达式删除部分字符串

时间:2012-02-01 15:40:36

标签: c# regex

我是正则表达式的新手,我有一个字符串,例如

String test = @"c:\test\testing";

现在我想要完成的是将所有单词删除到“\”。所以在这种情况下,被删除的工作是“测试”。然而,这个词每次都可能不同。 所以基本上删除每一个,直到找到第一个\。

有什么想法吗?

7 个答案:

答案 0 :(得分:6)

你的意思是向后移除,直到找到第一个\?

如果没有正则表达式,您可以轻松完成此操作:

var lastIndex = myString.LastIndexOf('\\');
if (lastIndex != -1)
{
    myString = myString.Substring(0, lastIndex + 1); // keep the '\\' you found
}

但是,如果您真的只是想获取路径的目录组件,可以使用它:

var directoryOfPath = System.IO.Path.GetDirectoryName(fullPath);

虽然IIRC方法调用会消除尾随反斜杠。

答案 1 :(得分:2)

您可以使用以下正则表达式模式:

(?!\\)([^\\]*)$

使用空字符串替换此模式,如下所示:

var re = new Regex(@"(?!\\)([^\\]*)$");

var result = re.Replace(@"c:\test\testing", string.Empty);

Console.WriteLine(result);

但是,请考虑使用System.IO命名空间,特别是Path类,而不是Regex。

答案 2 :(得分:1)

试试这个 \\\w+$并将其替换为\

或者您可以使用以下方法

(?<=\\)\w+$在这种情况下,您只需用空字符串替换匹配项。

答案 3 :(得分:1)

您可以在没有正则表达式的情况下执行此操作:

String test = @"c:\test\testing";
int lastIndex = test.LastIndexOf("\");
test = test.Remove(0, lastIndex >= 0 ? lastIndex : 0);

答案 4 :(得分:1)

我更喜欢使用DirectoryInfo来进行此操作,甚至使用子字符串操作。

DirectoryInfo dir = new DirectoryInfo(@"c:\test\testing");
String dirName = dir.Name;

答案 5 :(得分:0)

regex.replace(str,"^.*?\\","");

答案 6 :(得分:0)

如果您要“删除”或操纵文件路径,可以完全跳过基本的Regex课程,并使用Path中的课程System.IO。该类将为您提供更改/提取文件名所需的所有方法。