从较长的字符串中解析字符串的最佳方法是什么?

时间:2011-07-05 14:19:00

标签: c# string parsing

我有一个看起来像这样的字符串:

"/dir/location/test-load-ABCD.p"

我需要解析“ABCD”(ABCD每天都会有不同的价值)

我所知道的唯一一致的东西(用于解析逻辑)是:

  1. 后面总会有一个“.p”
  2. 在值之前总会有“test-load-”。
  3. 我想到的东西以某种方式抓住了最后一个“/”后的所有内容,然后删除了最后2个字符(以“.p”为例,然后再进行

     .Replace("test-load-", "")
    

    但它感觉有点hacky所以我想看看人们是否对更优雅的解决方案有任何建议。

3 个答案:

答案 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