c# - 获取倒数第二次出现的字符/字符串之后的字符串

标签 c# regex string linq

我有一个不寻常的项目,其中我需要检索倒数第二次出现的字符“\”之后的文本,从而有效地为我提供了以下示例字符串中的最后两个目录:

  • D:\存档目录\2015-12-31 PM\SerialNo_01
  • D:\存档目录\2016-01-01\SerialNo_02
  • D:\存档目录\2016 年 1 月\SerialNo_03

期望的结果分别是:

  • 2015年12月31日下午\SerialNo_01
  • 2016-01-01\SerialNo_02
  • 2016 年 1 月\SerialNo_03

我希望尽可能干净地完成此操作,最好为每个字符串使用一行代码。

我在 Stack Overflow 上找不到有关查找 c# 中字符串或字符串中倒数第二个出现的内容(或者就此而言,向后出现的任何第 N 次出现的字符串或字符)的信息后,我回答了这个问题。如果社区发现这个问题重复或者觉得这个案例太晦涩,我愿意将其删除。

编辑:澄清我不需要将其作为字符串列表来执行;它们将一次运行一个。我将它们作为单选按钮控件动态添加到表单中。

最佳答案

您不需要正则表达式,您可以依赖 .NET 提供的内置路径处理。

var input = new List<string> { 
    @"D:\Archive Directory\2015-12-31 PM\SerialNo_01",
    @"D:\Archive Directory\2016-01-01\SerialNo_02",
    @"D:\Archive Directory\January 2016\SerialNo_03"
};

var result = input.Select(s => Path.Combine(Directory.GetParent(s).Name, Path.GetFileName(s)));

产量:

2015-12-31 PM\SerialNo_01 
2016-01-01\SerialNo_02 
January 2016\SerialNo_03 

那么您无需担心边缘情况,甚至跨操作系统兼容性。

关于c# - 获取倒数第二次出现的字符/字符串之后的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34585526/

相关文章:

c# - 代码契约检查线程亲和性——好主意?

c# - 无法查询 AD(获取 DirectoryServicesCOMException)

python - 在mysql加载数据文件导入期间删除CSV公式值

c# - 索引未分析的映射无法使用嵌套

java - 如何在Java中使用正则表达式分割特殊字符

javascript - 正则表达式不能在 c# 中工作,但可以在 javascript 中工作

html - 带空格的ejs字符串变量无法正确显示

c# - 在指定字符串后添加字符串

c - 反转字符串(输入参数并返回字符串)

c# - 如何在表单中找到图片框并为它们添加特定的事件处理程序