2011-11-25 29 views
2

我需要找到这个字符串中值:查找值内的字符串

10days25hours15minutes 

我需要得到的天数,小时和分钟数,但该字符串可以改变的,就像这样:

10d25h15m 
+0

他们总是在相同的顺序? (即天数,小时数和分钟数) – BlackBear

+0

它将始终是格式10(日期分辨率)25(小时分隔符)15(分钟分隔符)吗?如果你愿意做一个正则表达式替换字母到一些分隔符(而另一个把多个分隔符变成一个),然后分割那个分隔符?或者,您可以对数字进行正则表达式匹配,并使用这些组来获取单个数量。 – John

+3

你需要一些规范,只有2个例子不会削减它。 –

回答

4

假定输入字符串由三个十进制数每个由一个或多个非数字终止的,则可以使用以下正则表达式:

var match = Regex.Match("10days25hours15minutes", @"(\d+)\D+(\d+)\D+(\d+)\D+"); 

var result = new TimeSpan(
    days: int.Parse(match.Groups[1].Value), 
    hours: int.Parse(match.Groups[2].Value), 
    minutes: int.Parse(match.Groups[3].Value), 
    seconds: 0); 

// result == {11.01:15:00} 
1
Regex.Match(str, @"(?<days>[0-9]+)(d|days) 
        (?<hours>[0-9]+)(h|hours) 
        (?<minutes>[0-9]+)(m|minutes)"); 

然后使用match.Groups["days"].Valuematch.Groups["hours"].Valuematch.Groups["minutes"].Value检索值。

6

您可以使用正则表达式this

(?<days>\d+)d\D*(?<hours>\d+)h\D*(?<minutes>\d+)m\D* 

相匹配 10days25hours15minutes10d25h15m。 (以及其他)

您可能希望根据您的需要使其更加准确。

示例代码:

var match = System.Text.RegularExpressions.Regex.Match("10days25hours15minutes", @"(?<days>\d+)d\D*(?<hours>\d+)h\D*(?<minutes>\d+)m\D*", System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
if (match.Success) 
{ 
    Console.WriteLine("Days: {0} Hours: {1} Minutes: {2}", match.Groups["days"], match.Groups["hours"], match.Groups["minutes"]); 
} 
+0

+1正是我正要写的 - 很高兴我刷新了! –

+0

结果不显示所有小时数或分钟数 – soamazing

+0

@soamazing'Days:10 Hours:25 Minutes:15'就是我运行示例代码('Mono 2.10.6')时得到的输出。实际上,在最初的答案中,我写了'System.Text.Regex'而不是'System.Text.RegularExpressions.Regex',我在几秒前修复了它,但这与您的问题无关。 – fardjad

0
Text.Split(new string[] 
    {"days", "hours", "minutes"},StringSplitOptions.RemoveEmptyEntries) 

Text.Split(new string[]{"d", "h", "m"},StringSplitOptions.RemoveEmptyEntries) 

返回您的号码ordinaly ...