1

我有以下格式的字符串:

0Days0hours51Minutes32Seconds

我想做的是把它分成4个数值

days,hours,minutes,seconds

所以我需要返回的值是 0、0、51、32。

有没有更好的方法来做这个通常的string.Split(...)方法?

理想情况下,如果有字母分割,那么只保留数值。

4

4 回答 4

5
string input = "0Days0hours51Minutes32Seconds";
var nums = Regex.Matches(input, @"\d+").Cast<Match>()
                .Select(m => int.Parse(m.Value))
                .ToList();
于 2013-09-10T12:54:28.330 回答
1

如果您只想要数字而不关心字符串的其余部分,您可以使用:

string input = "0Days0hours51Minutes32Seconds";
var numbers = Regex.Matches(input, @"\d+")
                   .Cast<Match>()
                   .Select(m => int.Parse(m.Value));

但是,如果要验证字符串是否符合预期格式,则可以使用更全面的模式。

string input = "0Days0hours51Minutes32Seconds";
var match = Regex.Match(
    input,
    "^(\d+)Days(\d+)hours(\d+)Minutes(\d+)Seconds$");

var days = int.Parse(match.Groups[1].Value);
var hours = int.Parse(match.Groups[2].Value);
var minutes = int.Parse(match.Groups[3].Value);
var seconds = int.Parse(match.Groups[4].Value);

我还建议您将这些值放入一个有用的结构中,例如TimeSpan

var timespan = new TimeSpan(days, hours, minutes, seconds);
于 2013-09-10T13:04:33.447 回答
1

String.Split(...)您可以使用Regex.Match(string,@"\d+")仅检索数值而不是使用。

于 2013-09-10T12:54:59.127 回答
1
var numbers = Regex.Split(input, @"\D+");
于 2013-09-10T12:58:58.223 回答