3

我正在研究 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: 10, 11,9

图案:

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

2 回答 2

3

不需要捕获组。查看完整的C# 在线演示

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

您可以使用此正则表达式:

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

请参阅此C# 在线演示最底部的输出:

10
11
9
  • (?<=-> \[Task id=)向后看确保我们前面有从箭头到等号的部分
  • \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();
} 

带有捕获组的原始版本

为了给你第二个选择,这是我使用捕获组的原始演示。

参考

于 2014-06-20T03:50:21.277 回答
3

要获取这些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);

工作演示

说明

->          # '->'
\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
于 2014-06-20T03:56:46.680 回答