我在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]]发布于 2014-06-20 03:56:46
要获取这些 id ,您需要在->之后查找Task,您可以使用火柴方法尝试以下操作。
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-20 03:50:21
不需要捕获组。见完整的 C#在线演示
我最初的答案是使用捕获组。但我们不需要他们。
您可以使用这个regex:
(?<=-> \[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();
} 带有捕获组的原始版本
为了给您第二个选择,这里是我使用捕获组的原始演示。
参考
https://stackoverflow.com/questions/24319592
复制相似问题