为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式从字符串中提取时间信息

正则表达式从字符串中提取时间信息

C#
慕沐林林 2023-09-16 17:23:12
我正在从第三方设备接收数据。我需要提取两条信息。我想我需要使用正则表达式,但我对此一无所知。您可以在下面找到一些示例字符串:TN        12  1 17:45:19.90400  7173TN         4  4 17:45:20.51800  7173TN        13  1 17:45:24.03200  7173TN         5  4 17:45:26.06300  7173TN         6  4 17:45:29.28700  7173TN        14  1 17:45:31.03200  7173我需要从每个字符串中提取两条数据:时间时间之前的数字所以我正在寻找的数据是这样的:1 and 17:45:19.904004 and 17:45:20.518001 and 17:45:24.032004 and 17:45:26.063004 and 17:45:29.287001 and 17:45:31.03200该数字将始终存在,并且始终为 1、2、3 或 4。时间也将采用相同的格式,但我不确定是否会有个位数的小时数。所以不知道9点会不会显示为9 或 09关于如何使用正则表达式提取它有什么建议吗?
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

我通常的方法是创建一个类来表示我们想要捕获的数据,并为其提供一个静态Parse方法,该方法接受输入字符串并返回填充有字符串中的数据的类的实例。然后我们可以循环遍历这些行并使用每行的数据填充自定义类的列表。


例如:


class TimeData

{

    public TimeSpan Time { get; set; }

    public int Number { get; set; }


    public static TimeData Parse(string input)

    {

        var timeData = new TimeData();

        int number;

        TimeSpan time;


        if (string.IsNullOrWhiteSpace(input)) return timeData;


        var parts = input.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);


        if (parts.Length > 2 && int.TryParse(parts[2], out number))

        {

            timeData.Number = number;

        }


        if (parts.Length > 3 && TimeSpan.TryParseExact(parts[3], "hh\\:mm\\:ss\\.fffff", 

            CultureInfo.CurrentCulture, out time))

        {

            timeData.Time = time;

        }


        return timeData;

    }

}

现在我们可以循环遍历字符串列表,调用Parse每一行,并最终得到一个新的对象列表,其中包含与每行Time关联的 和。Number另请注意,通过使用 aTimeSpan表示时间,我们现在拥有所有部分的属性,例如Hour、Minute、Seconds、Milliseconds、TotalMinutes等:


var fileLines = new List<string>

{

    "TN        12  1 17:45:19.90400  7173",

    "TN         4  4 17:45:20.51800  7173",

    "TN        13  1 17:45:24.03200  7173",

    "TN         5  4 17:45:26.06300  7173",

    "TN         6  4 17:45:29.28700  7173",

    "TN        14  1 17:45:31.03200  7173",

};


List<TimeData> allTimeData = fileLines.Select(TimeData.Parse).ToList();


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 59 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信