【问题标题】:How to get predecessor id from task predecessor string?如何从任务前任字符串中获取前任 ID?
【发布时间】:2020-07-01 07:55:57
【问题描述】:

我正在开发 MPXJ 库。我想从下面的字符串中获取前辈 id。这对我来说很复杂。请帮我获取所有前辈的id。谢谢。

任务前置字符串:

Task Predecessors:[[Relation [Task id=12 uniqueID=145 name=Alibaba1] -> [Task id=10 uniqueID=143 name=Alibaba2]],
[Relation [Task id=12 uniqueID=145 name=Alibaba3] -> [Task id=11 uniqueID=144 name=Alibaba4]], [Relation [Task id=12 uniqueID=145 name=Alibaba5] -> [Task id=9 uniqueID=142 name=Alibaba6]]]

我需要得到前辈的id:10119

图案:

[Task id=12 uniqueID=145 name=Alibaba1] -> [Task id=10 uniqueID=143 name=Alibaba2]]

【问题讨论】:

    标签: c# regex regular-language mpxj


    【解决方案1】:

    要获取那些ID,您需要在-> 之后查找Task id 您可以使用Matches 方法尝试以下操作。

    Regex rgx = new Regex(@"->\s*\[Task\s*id=(\d+)");
    
    foreach (Match m in rgx.Matches(input))
            Console.WriteLine(m.Groups[1].Value);
    

    Working Demo

    解释

    ->          # '->'
    \s*         # whitespace (\n, \r, \t, \f, and " ") (0 or more times)
    \[          # '['
     Task       # 'Task'
     \s*        # whitespace (\n, \r, \t, \f, and " ") (0 or more times)
     id=        # 'id='
      (         # group and capture to \1:
       \d+      #   digits (0-9) (1 or more times)
      )         # end of \1
    

    【讨论】:

      【解决方案2】:

      不需要捕获组。查看全文C# online demo

      我的原始答案使用了捕获组。但我们不需要它们。

      你可以使用这个正则表达式:

      (?<=-> \[Task id=)\d+
      

      查看C# online demo最底部的输出:

      10
      11
      9
      
      • (?&lt;=-&gt; \[Task id=)lookbehind 确保我们前面是从箭头到等号的部分
      • \d+ 匹配 id

      这段 C# 代码将所有代码添加到 resultList:

      var myRegex = new Regex(@"(?<=-> \[Task id=)\d+");
      Match matchResult = myRegex.Match(s1);
      while (matchResult.Success) {
      resultList.Add(matchResult.Value);
      Console.WriteLine(matchResult.Value);
      matchResult = matchResult.NextMatch();
      } 
      

      带有捕获组的原始版本

      为您提供第二个选择,这是我使用捕获组的original demo

      参考

      【讨论】:

        猜你喜欢
        • 2011-03-19
        • 1970-01-01
        • 2018-11-27
        • 2013-12-09
        • 2011-10-05
        • 2020-11-21
        • 2012-03-19
        • 1970-01-01
        • 2019-12-29
        相关资源
        最近更新 更多