我有以下格式的字符串:
0Days0hours51Minutes32Seconds
我想做的是把它分成4个数值
days,hours,minutes,seconds
所以我需要返回的值是 0、0、51、32。
有没有更好的方法来做这个通常的string.Split(...)
方法?
理想情况下,如果有字母分割,那么只保留数值。
string input = "0Days0hours51Minutes32Seconds";
var nums = Regex.Matches(input, @"\d+").Cast<Match>()
.Select(m => int.Parse(m.Value))
.ToList();
如果您只想要数字而不关心字符串的其余部分,您可以使用:
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);
String.Split(...)
您可以使用Regex.Match(string,@"\d+")
仅检索数值而不是使用。
var numbers = Regex.Split(input, @"\D+");