2011-07-05 46 views
0

我有一个字符串,它看起来像这样:从较长的字符串中解析出字符串的最佳方法是什么?

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

,我需要分析出“ABCD”(其中ABCD每天会有不同的值)

,我知道将要在唯一的东西始终是一致的(要用于解析逻辑)为:

  1. 总是会有成为值之后一个“.P”
  2. 总是会有一个‘测试负载’的值之前。

我想的东西莫名其妙地被抓住一切都会过去的最后一个“/”,然后删除最后2个字符(取“.P”的情况,然后做了

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

但感觉那种哈克,所以我想看看如果人们对一个更优雅的解决方案有任何建议

回答

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); 
0

由于这是一个文件名,使用的文件名解析由框架提供的设施:

var fileName = System.IO.Path.GetFileNameWithoutExtension("/dir/location/test-load-ABCD.p"); 
string result = fileName.Replace("test-load-", ""); 

与使用Replace相比,“较不冒险”的解决方案是使用正则表达式来捕获解决方案,但我认为在这种情况下这将是矫枉过正的。

+1

'Path.GetFileNameWithoutExtension' – SLaks

+0

@SLaks已经注意到并固定。 –

+1

@Konrad Rudolph - FileInfo确实检查这是一个真实的文件,因为上面的文件并没有真正映射到真实的文件 – leora

0
string input = "/dir/location/test-load-ABCD.p"; 

Regex.Match(input, @"test-load-([a-zA-Z]+)\.p$").Groups[1].Value 
相关问题