我有一个看起来像这样的字符串:
"/dir/location/test-load-ABCD.p"
我需要解析“ABCD”(ABCD每天都会有不同的价值)
我所知道的唯一一致的东西(用于解析逻辑)是:
我想到的东西以某种方式抓住了最后一个“/”后的所有内容,然后删除了最后2个字符(以“.p”为例,然后再进行
.Replace("test-load-", "")
但它感觉有点hacky所以我想看看人们是否对更优雅的解决方案有任何建议。
答案 0 :(得分:7)
您可以使用正则表达式:
static readonly Regex parser = new Regex(@"/test-load-(.+)\.p");
string part = parser.Match(str).Groups[1].Value;
为了增加弹性,请将.+
替换为仅包含该部分中可能出现的字符的字符类。
<强>加成强>:
你可能接下来想要
DateTime date = DateTime.ParseExact(part, "yyyy-MM-dd", CultureInfo.InvariantCulture);
答案 1 :(得分:0)
由于这是一个文件名,因此请使用框架提供的文件名解析工具:
var fileName = System.IO.Path.GetFileNameWithoutExtension("/dir/location/test-load-ABCD.p");
string result = fileName.Replace("test-load-", "");
比使用Replace
更“hacky”的解决方案是使用正则表达式来捕获解决方案,但我认为在这种情况下这将是过度的。
答案 2 :(得分:0)
string input = "/dir/location/test-load-ABCD.p";
Regex.Match(input, @"test-load-([a-zA-Z]+)\.p$").Groups[1].Value