我有一个
类型的字符串2014-02-19 16:21:46,139 ERROR queue.TaskQueueEngine - 失败了 解决第一级故障检测任务的任务队列条目 java.sql.SQLException:网络错误IOException:连接定时 out:connect 2014-02-19 16:35:48,247 ERROR [pool-1-thread-1] cluster.ClusterServiceImpl - 尝试更新时出现意外错误 LastCheckinTime java.sql.SQLException:网络错误IOException: 连接超时:连接
...
我试图通过例如日期时间值将其拆分为子串。
log [0] = 2014-02-19 16:21:46,139 ERROR queue.TaskQueueEngine - 失败 解决第一级故障检测任务的任务队列条目 java.sql.SQLException:网络错误IOException:连接定时 out:connect
log [1] = 2014-02-19 16:35:48,247 ERROR [pool-1-thread-1] cluster.ClusterServiceImpl - 尝试更新时出现意外错误 LastCheckinTime java.sql.SQLException:网络错误IOException: 连接超时:连接
我正在使用以下命令
string exLogs = System.IO.File.ReadAllText(@"D:\orion.log");
string[] messages = Regex.Split(exLogs,] @"^([0-9]{4})-([0-1][0-9])-
([0-3][0-9])\s([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])");
然而,不是给我子串,而是给了我
log[0]=2014
log[1]=02
等。 我能做错什么? 非常感谢任何帮助。
答案 0 :(得分:1)
删除匹配器的^
表单开头。
^
表示匹配必须从字符串或行的开头开始。
试试这个:
string[] messages = Regex.Split(exLogs,
"([0-9]{4}-[0-1][0-9]-[0-3][0-9]\\s(?:[0-1][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9])");
答案 1 :(得分:0)
我认为这将分为两个部分:
首先得到分裂:
string[] dateAndTime = tex.Split(' ');
然后在他自己的字符串中获取每个日期和时间]:
string[] date = dateAndTime[0].Split('-');
string[] time = dateAndTime[1].Split(':');
我希望这会有所帮助
答案 2 :(得分:-1)
这里发生了一些事情 - 你正在使用许多你不需要捕获的parens - 这些导致每个捕获paren的结果作为单独的结果返回。其中大部分都不是必需的 - 唯一需要的是用于小时比赛的那个,它可以变成非捕获用的。
第二 - 您正在将正则表达式锚定到行的开头(^
) - 这意味着它永远不会与日志中间的日期匹配。
第三 - 您对\s
的使用与多个空格不匹配 - 您应该使用\s+
。
第四 - 拆分不会返回拆分的值。
我删除了大部分捕获的parens,添加了一小时的无捕获,删除了起始锚点,并将空间匹配器更改为\s+
。
我把整个东西包裹在一个paren中以返回日期值:
@"([0-9]{4}-[0-1][0-9]-[0-3][0-9]\s+(?:[0-1][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9])"
这将返回一个数组,其中第一个项为空(第一个日期之前),然后是日期,然后是日志错误,然后是日期,然后是日志错误。