C# 将给定字符串溢出的正则表达式

C# 将给定字符串溢出的正则表达式,c#,regex,C#,Regex,我有一个字符串“D:\TFS\Portal\BusinessNotes\104668Desert.jpg”。我只想使用regex方法获取单词“Desert.jpg”。我试过了 string[] lines = Regex.Split("D:\TFS\Portal\BusinessNotes\104668Desert.jpg", "[0-9]*"); 但是没有用。我想在第[1]行中获得“Desert.jpg”。我如何才能实现它。 注:数字可能会保持长度的变化您拥有的是一条路径,您可以使用它 编

我有一个字符串
“D:\TFS\Portal\BusinessNotes\104668Desert.jpg”
。我只想使用regex方法获取单词
“Desert.jpg”
。我试过了

 string[] lines = Regex.Split("D:\TFS\Portal\BusinessNotes\104668Desert.jpg", "[0-9]*");
但是没有用。我想在第[1]行中获得“Desert.jpg”。我如何才能实现它。
注:数字可能会保持长度的变化

您拥有的是一条路径,您可以使用它

编辑:然后你可以去掉数字

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

你拥有的是一条路径,你可以使用它

编辑:然后你可以去掉数字

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

您可以在不使用正则表达式的情况下执行此操作,如:

string filePath = @"D:\TFS\Portal\BusinessNotes\104668Desert.jpg";
string result = new String(Path.GetFileName(filePath)
                            .Where(r=> !char.IsDigit(r))
                            .ToArray());
或者,如果您想通过正则表达式执行此操作,则:

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

您可以在不使用正则表达式的情况下执行此操作,如:

string filePath = @"D:\TFS\Portal\BusinessNotes\104668Desert.jpg";
string result = new String(Path.GetFileName(filePath)
                            .Where(r=> !char.IsDigit(r))
                            .ToArray());
或者,如果您想通过正则表达式执行此操作,则:

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

可能有一些更有效的方法来执行此操作,但以下方法将返回文件名和扩展名,而不返回前导数字:

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]+
  • 结束捕获)
  • 它必须位于该行的末尾:$
您可以进一步优化正则表达式,但我想展示一下到底发生了什么


如果决定拆分,则必须使用第二个结果,因为第一个和第三个结果为空

可能有一些更有效的方法来执行拆分,但以下将返回文件名和扩展名,而不返回前导号码:

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]+
  • 结束捕获)
  • 它必须位于该行的末尾:$
您可以进一步优化正则表达式,但我想展示一下到底发生了什么


如果您决定拆分,您将不得不使用第二个结果,因为第一个和第三个结果是空的

您能给我一个有效和无效输入的示例吗?您能给我一个有效和无效输入的示例吗?它返回104668Desert.jpg这不是OP的结果wants@Sayse,现在您需要一个
Where
而不是
Select
,否则结果将是
true
false
。另外,你也不需要
ToCharArray
@Habib-再次感谢:)(我的日常工作使用一种语言,Select做的是c做的,我在哪里把它们混淆了很多:)@Sayse,这仍然不编译
IsNumber
char
上的一个静态方法,所以它应该是
char.IsNumber(x)
,另外,
string.Join
需要两个参数,缺少分隔符。@Habib-再次感谢,我现在已经测试过了,并且一切正常。它返回的是104668Desert.jpg,而不是OPwants@Sayse,现在您需要一个
Where
而不是
Select
,否则结果将是
true
false
。另外,你也不需要
ToCharArray
@Habib-再次感谢:)(我的日常工作使用一种语言,Select做的是c做的,我在哪里把它们混淆了很多:)@Sayse,这仍然不编译
IsNumber
char
上的一个静态方法,所以它应该是
char.IsNumber(x)
,另外,
string.Join
需要两个参数,分隔符丢失。@Habib-再次感谢,我现在已经测试过了,一切正常