【问题标题】:Split string by date time values into substrings按日期时间值将字符串拆分为子字符串
【发布时间】:2014-03-02 08:32:57
【问题描述】:

我有一个类型的字符串

2014-02-19 16:21:46,139 错误 queue.TaskQueueEngine - 未能 解决一级故障检测任务的任务队列入口 java.sql.SQLException: 网络错误 IOException: Connection timed 出:连接 2014-02-19 16:35:48,247 错误 [pool-1-thread-1] cluster.ClusterServiceImpl - 尝试更新时出现意外错误 LastCheckinTime java.sql.SQLException: 网络错误 IOException: 连接超时:连接

....

我正在尝试按日期时间值将其拆分为子字符串,例如。

log[0]=2014-02-19 16:21:46,139 错误 queue.TaskQueueEngine - 失败 解决一级故障检测任务的任务队列入口 java.sql.SQLException: 网络错误 IOException: Connection timed 出:连接

log[1]=2014-02-19 16:35:48,247 错误 [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

等等。 我可能做错了什么。 感谢任何帮助将不胜感激。

【问题讨论】:

  • @SudhakarTillapudi - 假定日期之后的错误日志文本从不包含逗号。我会非常厌倦假设。

标签: c# regex pattern-matching


【解决方案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])");

【讨论】:

  • | 表示您的正则表达式与预期的非常不同。请改用非捕获括号。
【解决方案2】:

我认为这会更容易分为两部分:

首先得到拆分:

string[] dateAndTime = tex.Split(' ');

然后在自己的字符串中获取日期和时间]:

string[] date = dateAndTime[0].Split('-');
string[] time = dateAndTime[1].Split(':');

希望对你有帮助

【讨论】:

    【解决方案3】:

    这里发生了一些事情 - 您在不需要的地方使用了许多捕获括号 - 这些导致每个捕获括号的结果作为单独的结果返回。其中大部分是不需要的 - 唯一需要的是用于小时匹配的一个,它可以更改为非捕获paren。

    第二 - 您将正则表达式锚定到行首 (​​^) - 这意味着它永远不会匹配日志中间的日期。

    第三 - 您使用 \s 不会匹配多个空格 - 您应该使用 \s+

    第四 - split 不会返回 split on 的值。

    我删除了大部分捕获括号,添加了一个小时的无捕获,删除了开始锚点,并将空间匹配器更改为 \s+

    我将整个东西包裹在一个括号中以返回日期值:

    @"([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])"
    

    这将返回一个数组,其中第一项为空(第一个日期之前的内容),然后是日期,然后是日志错误,然后是日期,然后是日志错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-15
      • 2011-11-25
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2012-11-20
      • 2019-05-22
      相关资源
      最近更新 更多