【问题标题】:Regex extract from string xx:xx:xx format从字符串 xx:xx:xx 格式中提取正则表达式
【发布时间】:2020-03-27 08:34:19
【问题描述】:

我对编程很陌生,我有一个问题,我正在尝试使用 Regex 方法从字符串中提取小时、分钟和秒并将它们放入数组中,但到目前为止我只能用一个数字来完成:

 int initialDay D = 0;
 string startDay = Console.ReadLine(); //input:  "It started 5 days ago"
 var resultString = Regex.Match(startDay, @"\d+").Value; 
 initialDay = Int32.Parse(resultString);   // initialDay here equals 5.

如何从字符串中读取 06:11:33,并将这些小时、分钟和秒转换为整数数组?所以结果数组会是这样的:

int[] array = new int[] {n1, n2, n3}; // the n1 would be 6, n2 would be 11 and n3 would be 33

提前感谢您的宝贵时间!

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    如果输入是这种格式(dd:dd:dd),你实际上不需要正则表达式。您可以使用 String.Split() 方法。例如:

    string test = "23:22:21";
    string []res = test.Split(':');
    

    res 数组现在将包含“23”、“22”、“21”作为其元素。然后您只需要将它们转换为 int。

    【讨论】:

    • 谢谢,这正是我所需要的。也许我在使用正则表达式时超越了自己。
    【解决方案2】:

    除非您尝试学习正则表达式,否则您没有理由自己执行此解析。

    对这个任务使用TimeSpan.Parse() 方法。

    【讨论】:

      【解决方案3】:

      像这样使用Regex.Matches(string input, string pattern)

      var results = Regex.Matches(startDay, @"\d+");
      var array = (from Match match in results
                   select Convert.ToInt32(match.Value))
                  .ToArray();
      

      【讨论】:

        【解决方案4】:

        正则表达式方式:

        var pattern = @"(\d{1,2})\s?\:\s?(\d{1,2})\s?\:\s?(\d{1,2})";
        var input = "06 : 11 : 33";
        var arr = Regex.Matches(input, pattern)
            .Cast<Match>()
            .SelectMany(x => x.Groups.Cast<Group>()
            .Skip(1)
            .Select(y => int.Parse(y.Value)))
            .ToArray();
        
        Console.WriteLine(string.Join("\n", arr));
        

        输出:

        06
        11
        33
        

        regex101

        【讨论】:

          【解决方案5】:

          您可以使用 TimeSpan.Parse() 代替正则表达式 检查它https://docs.microsoft.com/pl-pl/dotnet/api/system.timespan.parse?view=netframework-4.8

          【讨论】:

            【解决方案6】:

            您可以使用string.Split() 获取由: 分隔的元素数组。然后你可以循环遍历它,int.Parse 元素并将它们分配给整数数组。

            string[] buffer = startDay.Split(':');
            int[] array = new int[buffer.Length];
            for (int i = 0; i < buffer.Length; i++)
            {
                array[i] = int.Parse(buffer[i]);
            }
            

            或者你可以使用 Linq 的Select() 进行解析。

            int[] array = startDay.Split(':').Select(e => int.Parse(e)).ToArray();
            

            【讨论】:

              【解决方案7】:

              如果您将日期作为简单字符串,则可以使用拆分方法:

              string dataString = "06 : 11 : 33";
              string[] arrayStr = dataString.Split(':');
              

              然后您可以使用 System.Linq 制作 int 列表:

              List<int> intList = arrayStr.Select(p => Convert.ToInt32(p)).ToList();
              

              【讨论】:

                猜你喜欢
                • 2018-06-21
                • 1970-01-01
                • 2019-03-13
                • 2014-08-25
                • 2021-10-19
                • 1970-01-01
                • 1970-01-01
                • 2018-02-23
                • 2014-10-17
                相关资源
                最近更新 更多