当前位置: 首页 > 知识库问答 >
问题:

持续时间(HH: MM)和拆分的正则表达式?(或内置C#拆分器)?

李博达
2023-03-14

我正在尝试按照以下格式解析字符串:HH:MM

12:23 //Normal
2:24 //No trailing 0
01:00 //With trailing 0
00:21 //00 First number
0:32 //0 First Number
10:4 //No 0 second number, denotes 10:04

第一个数字最大24,最小0。

第二个数字最大59,最小0。

我制作了字符串正则表达式字符串\d:\d。但这仍然匹配范围之外的数字。处理这些数字的最佳方式是什么?

我在C#中作为字符串进行此验证,如果有更好的方法来验证此格式(并将其拆分为小时和分钟,请让我知道!)

基本上,我接受输入为HH:MM,对其进行验证、拆分,然后将其转换为分钟的整数。

示例:

  1. 用户输入10:20

共有1个答案

匡晟
2023-03-14

您可以使用TimeSpan。TryParse。这具有通过TotalMinute属性为您计算分钟数的额外好处:

List<string> tests = new List<string>()
{
    "12:23", //Normal
    "2:24", //No trailing 0
    "01:00", //With trailing 0
    "00:21", //00 First number
    "0:32", //0 First Number
    "10:4", //No trailing 0 second number
};

foreach (var test in tests)
{
    TimeSpan t;
    if (TimeSpan.TryParse(test, out t))
        Console.WriteLine(t.TotalMinutes);
    else
        Console.WriteLine("Not valid");
}

哪个输出:

743
144
60
21
32
604

@AlexK在评论中正确指出,这将匹配包含秒的字符串,例如11:22:33。为了防止这种情况,您可以使用TryParseExact并传递可接受格式的数组:

List<string> tests = new List<string>()
{
    "12:23", //Normal
    "2:24", //No trailing 0
    "01:00", //With trailing 0
    "00:21", //00 First number
    "0:32", //0 First Number
    "10:4", //No trailing 0 second number
    "11:22:33", //Error
};

foreach (var test in tests)
{
    TimeSpan t;
    //if (TimeSpan.TryParse(test, out t))
    if (TimeSpan.TryParseExact(test, new[] { "h\\:m", "hh\\:m", "hh\\:m", "h\\:mm", "hh\\:mm" }, CultureInfo.CurrentCulture, out t))
        Console.WriteLine(t.TotalMinutes);
    else
        Console.WriteLine("Failed");
}

哪些输出

743
144
60
21
32
604
失败

 类似资料:
  • 问题内容: 我想解决这个问题。 逗号:分割条款 双引号:字符串值(忽略特殊字符) 数组 例如: 输入: 预期输出: 但是我无法获得超越结果。 我写了下面的代码: 我的输出是: 我需要更改以获得预期的输出?我应该坚持使用正则表达式还是其他解决方案更灵活,更易于维护? 问题答案: 这个正则表达式可以达到目的: 它的工作原理是在逗号后添加一个用于匹配成对的方括号的预读-如果您 位于 方括号内,那么您当然

  • 使用JavaScript,我试图使用正则表达式将段落拆分为句子。我的正则表达式不考虑括号内的句子,我希望保留分隔符。 我在这里放了一个代码示例 jsFiddle.net

  • 问题内容: 我有一个字符串,需要根据出现的“,”(逗号)进行拆分,但是需要忽略在一对括号内出现的任何字符串。例如, 应拆分为 问题答案: 对于非嵌套 嵌套 (括号内的括号)

  • 我有一个表格形式的命令输出。我正在解析结果文件的输出并将其存储在字符串中。一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式匹配1个或多个空格并拆分它。但是,在每个元素之间插入一个空格: 还有更好的方法吗? 每次拆分后,str2都会附加到列表中。

  • 问题内容: 我正在尝试使用运算符-+ * /将正则表达式拆分为1.5 + 4.2 *(5 + 2)等式,以便将输出输入到数组中,以便我可以单独解析 我发现可以使用,但是如果我要保留小数点,它将不会拆分。 我已经尝试过分割,但是它不会在小数点上分割 问题答案: 您还可以使用?:避免捕获组。我把它简化了。

  • 字符串示例: 比方说,我想用<代码>来分割这个句子 字符(如果不在<代码> 我一直在使用: 如果不在<代码>