正则表达式 - 在其自己的捕获组中包含所有其他线段

时间:2017-05-31 00:40:13

标签: regex regex-group

我有一个包含以下内容的日志文件:

Log Started
Created Date: YY/MM/DD Time: HH:MM:SS Start
Added resources at module on YY/MM/DD HH:MM
Module 2 excecute
Resource depleted at HH:MM n pieces
Open YY/MM/DD HH:MM:SS Log to refer
Target end date of new resource YY/MM/DD approved
Log Ended. Result OK

图例:

  • 'YY / MM / DD'& 'HH:MM:SS' - 这些是不重要的时间戳
  • 其他所有 - 重要的数据

注意:

  • 如您所见,日期和时间可以两者在同一行, 位于行内的任何地方,时间可以是HH:MM或HH:MM:SS。
  • 有些行可以没有日期/时间戳

我目前有以下正则表达式,但它只能捕获每行的日期和时间戳:

(\d{2}(\d{2})?\/\d{2}\/\d{2}(\d{2})?)|(\d{2}:\d{2}(:\d{2})?)

但是,我需要能够捕获整行,并将每个重要且不重要的数据部分放在一个组中。

2 个答案:

答案 0 :(得分:1)

我不确定如何在C#中执行此操作(因为我之前从未使用过它),但这里是我要使用的正则表达式:

1。获得整行

(.*)\n

基本上只匹配所有内容,直到找到新的行\n

2。获取每行的非时间戳

将日志文件复制到新的临时变量中并删除所有时间戳并split the resulting string by the newline chars \n DEMO

3。获取不重要的时间戳

(\d{2}(\d{2})?\/\d{2}\/\d{2}(\d{2})?)|(\d{2}:\d{2}(:\d{2})?)

你的正则表达式非常好并且像魅力一样工作:)

答案 1 :(得分:1)

首先,您必须使用(.*)\n对每一行进行分组。然后,您必须使用分组字符串中的正则表达式替换日期格式。

点击这里。 https://msdn.microsoft.com/en-us/library/e7f5w83z(v=vs.110).aspx