我正在研究MPXJ库。我想从下面的字符串中获取前辈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]]
答案 0 :(得分:3)
无需捕获组。查看完整的C# online demo
我的原始答案使用了捕获组。但我们并不需要它们。
您可以使用此正则表达式:
(?<=-> \[Task id=)\d+
请参阅此C# online demo最底部的输出:
10
11
9
(?<=-> \[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使用捕获组。
<强>参考强>
答案 1 :(得分:3)
要获取 ID ,您需要在->
之后查找任务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