【问题标题】:I need to Split a string based on a complex delimiter我需要根据复杂的分隔符拆分字符串
【发布时间】:2010-03-26 20:18:28
【问题描述】:

在 C# 中,我需要根据特定的字符序列将字符串(log4j 日志文件)拆分为数组元素,即“nnnn-nn-nn nn:nn:nn INFO”。我目前正在用换行符分割这个日志文件,这很好,除非日志语句本身包含换行符。

我不控制输入(日志文件),因此无法以某种方式转义它们。

似乎我应该能够使用比较器或正则表达式来识别字符串,但 String.Split 没有这样的选项。

我是在自己的滚动中遇到困难,还是有一个模式或框架组件可以在这里提供帮助?

【问题讨论】:

    标签: c# regex parsing comparator


    【解决方案1】:

    为此使用Regex.Split()

    这个正则表达式应该可以工作,但你可能会找到一个更好的:

    @"\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d INFO"
    

    【讨论】:

      【解决方案2】:

      我最终不得不在某种程度上自己滚动这个,因为我需要 Regex.Split 吃的分隔符。

      private List<string> splitOnLogDelimiter(string bigString)
      {
          Regex r = new Regex("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2} [0-9]{2,2}:[0-9]{2,2}:[0-9]{2,2} INFO");
          List<string> result = new List<string>();
      
          //2010-03-26 16:06:38 INFO
          int oldIndex = 0;
          int newIndex = 0;
          foreach (Match m in r.Matches(bigString))
          {
              newIndex = m.NextMatch().Index-1;
              if (newIndex <= 0) break;
              result.Add(bigString.Substring(oldIndex, newIndex - oldIndex));
      
              oldIndex = newIndex+1;
          }
          return result;
      
      
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-04
        • 2019-09-19
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 2023-04-06
        • 2012-10-23
        相关资源
        最近更新 更多