我需要一些建议来了解拆分字符串的最简洁方法。
字符串 ix 是这样的:00h00m00s
虽然 h 前面的 nrs 也可以是 3 或 4 like 000h00m00s
。
所以我认为我可以用一个普通的 string.split 来做到这一点,并将最后 3 个到字符串 1,然后做 3 次。(然后删除最后一个以仅保留 nr)
或者,如果我使用正则表达式或其他东西,这会是一种更清洁(更好)的方式吗?我还处于编码的学习期,想知道你对这种情况的看法。什么方法是更好的方法,为什么?
假设您的输入与代表一个或多个十进制数字的格式匹配,您可以使用#h#m#s
String.Split方法将输入拆分为四个部分,使用Int32.Parse 方法将前三个部分中的每一个解析为整数,然后表示结果的TimeSpan 结构:#
var parts = "123h45m07s".Split('h', 'm', 's');
// parts == { "123", "45", "07", "" }
var result = new TimeSpan(hours: int.Parse(parts[0]),
minutes: int.Parse(parts[1]),
seconds: int.Parse(parts[2]));
// result == {5.03:45:07}
为此,Regex 可能是最好的——它是一种定义明确的格式。
var match = Regex.Match(input, @"^(\d+)h(\d+)m(\d+)s$");
var hoursString = match.Groups[1].Value;
var minutesString = match.Groups[2].Value;
var secondsString = match.Groups[3].Value;
var fields = input.Split(new[] { "h", "m" , "s" },
StringSplitOptions.RemoveEmptyEntries);
您可以使用此 正则表达式方法:
public static string[] Split(
string input,
string pattern
)
var result = Regex.Split(input, @"\D");
正则表达式适合此任务:
var regex = new Regex(@"^(?<hours>\d+)h(?<minutes>\d+)m(?<seconds>\d+)s$");
var match = regex.Match("13h44m52s");
if (match.Success) {
var hours = Int32.Parse(match.Groups["hours"].Value);
var minutes = Int32.Parse(match.Groups["minutes"].Value);
var seconds = Int32.Parse(match.Groups["seconds"].Value);
var timeSpan = new TimeSpan(hours, minutes, seconds);
// Use timeSpan ...
}
我会使用这个正则表达式来确保您期望的位数
var match = Regex.Match(input, "^(\d{2,})h(\d{2})m(\d{2})s$");
var h = match.Groups[1];
var m = match.Groups[2];
var s = match.Groups[3];