日期:2014-05-16  浏览次数:21076 次

正则表达式 救命
003 Mon Jan 27 08:12:09 2014 282(这里是注释:需要在这里断开,前面的数字282属于003,以此类推)004 Mon Jan 27 08:12:09 2014 82(这里是注释:需要在这里断开)005 Mon Jan 27 08:12:09 2014 282(这里是注释:需要在这里断开)003 Mon Jan 27 08:12:09 2014 0(这里是注释:需要在这里断开)001

设备编号组成由 001至016,全部数据有十万多条

这是我写的 
现在的问题  参数为零 下面的就没法匹配
(?<id>001|002|003|004|005)[ A-Za-z]{1,6}(?<date>[A-Za-z0-9 :]{20})[ ](?<value>[-1-9]{1,6})

003 Mon Jan 27 08:12:09 2014 282003 Mon Jan 27 08:12:09 2014 82003 Mon Jan 27 08:12:09 2014 282003 Mon Jan 27 08:12:09 2014 123001
------解决方案--------------------
(?<id>00[1-9]
------解决方案--------------------
01[0-6])\s*(?<date>\w*\s*\w*\s*\d{2}\s*\d{2}:\d{2}:\d{2}\s*\d{4})\s*(?<value>\d*)
------解决方案--------------------
参数为0什么意思?
这个表达式可以通过你给出的数据。

(?<id>(?:001
------解决方案--------------------
002
------解决方案--------------------
003
------解决方案--------------------
004
------解决方案--------------------
005))\s+(?:Mon
------解决方案--------------------
Fri)\s+(?:Jan
------解决方案--------------------
Oct)\s+(?<date>\d+\s+\d+:\d+:\d+\s+\d+)\s+(?<value>\d+)(?=(001
------解决方案--------------------
002
------解决方案--------------------
003))


下面这种也能通过
003 Mon Jan 27 08:12:09 2014 282003 Mon Jan 27 08:12:09 2014 82003 Mon Jan 27 08:12:09 2014 282003 Mon Jan 27 08:12:09 2014 0001

下面这种,严格来说通不过,会留下最后一条数据,但是你可以再用代码处理,如果一定要用正则,可以做到,另外搞一个分支就可以:

003 Mon Jan 27 08:12:09 2014 282003 Mon Jan 27 08:12:09 2014 82003 Mon Jan 27 08:12:09 2014 282003 Mon Jan 27 08:12:09 2014 123