正则表达式拆分给定的字符串

时间:2014-09-03 12:35:39

标签: c# regex

我有一个字符串"D:\TFS\Portal\BusinessNotes\104668Desert.jpg"。我想使用正则表达式方法来获取单词"Desert.jpg"。我试过了

 string[] lines = Regex.Split("D:\TFS\Portal\BusinessNotes\104668Desert.jpg", "[0-9]*");

但没有用。我想得到" Desert.jpg"在行[1]。我怎么能完成它。 ps:数字可能会保持长度变化

3 个答案:

答案 0 :(得分:3)

您拥有的是一条路径,您可以使用Path.GetFileName

Path.GetFileName(@"D:\TFS\Portal\BusinessNotes\104668Desert.jpg");

---

编辑:然后你可以删除数字

 var newName = string.Join(string.Empty, Path.GetFileName(pathFromAboveExample)
                                             .ToCharArray()
                                              .Where(c => !char.IsNumber(c)));

答案 1 :(得分:3)

你可以在没有REGEX的情况下做到这一点:

string filePath = @"D:\TFS\Portal\BusinessNotes\104668Desert.jpg";
string result = new String(Path.GetFileName(filePath)
                            .Where(r=> !char.IsDigit(r))
                            .ToArray());

或者如果你想通过REGEX这样做:

string result = Regex.Replace(Path.GetFileName(filePath), @"[\d-]", string.Empty);

答案 2 :(得分:0)

可能有一些更有效的方法,但以下将返回没有前导数字的文件名和扩展名:

Regex.Match(@"D:\TFS\Portal\BusinessNotes\104668Desert.jpg",
            @"\\[0-9]+([a-zA-Z]+\.[a-zA-Z]+)$").Groups[1].Value

正则表达式转换为:

  • 找到反斜杠:\
  • 后跟数字(1或更多):[0-9] +
  • 并抓住小组:(
    • 包含字母:[a-zA-Z] +
    • 然后是一个点:。
    • 然后是字母:[a-zA-Z] +
  • 结束捕获)
  • 它必须位于该行的末尾:$

你可以更多地优化正则表达式,但我想展示发生了什么。

如果您决定拆分,则必须取第二个结果,因为第一个和第三个结果是空的