我是正则表达式的新手,我有一个字符串,例如
String test = @"c:\test\testing";
现在我想要完成的是将所有单词删除到“\”。所以在这种情况下,被删除的工作是“测试”。然而,这个词每次都可能不同。 所以基本上删除每一个,直到找到第一个\。
有什么想法吗?
答案 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
。该类将为您提供更改/提取文件名所需的所有方法。