首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从任务前导字符串中获取前驱体id?

如何从任务前导字符串中获取前驱体id?
EN

Stack Overflow用户
提问于 2014-06-20 03:46:10
回答 2查看 789关注 0票数 3

我在MPXJ图书馆工作。我想从下面的字符串中得到前面的id。对我来说很复杂。请帮我弄到所有的前辈身份证。谢谢。

任务前导字符串:

代码语言:javascript
复制
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

模式:

代码语言:javascript
复制
[Task id=12 uniqueID=145 name=Alibaba1] -> [Task id=10 uniqueID=143 name=Alibaba2]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-20 03:56:46

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

代码语言:javascript
复制
Regex rgx = new Regex(@"->\s*\[Task\s*id=(\d+)");

foreach (Match m in rgx.Matches(input))
        Console.WriteLine(m.Groups[1].Value);

工作演示

解释

代码语言:javascript
复制
->          # '->'
\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
票数 3
EN

Stack Overflow用户

发布于 2014-06-20 03:50:21

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

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

您可以使用这个regex:

代码语言:javascript
复制
(?<=-> \[Task id=)\d+

参见此C#在线演示的最底层的输出

代码语言:javascript
复制
10
11
9
  • (?<=-> \[Task id=)查找后面确保前面是从箭头到等号的部分。
  • \d+与id匹配

此C#代码将所有代码添加到resultList

代码语言:javascript
复制
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();
} 

带有捕获组的原始版本

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

参考

  • 查找和查找零长度断言
  • 掌握向前看和向后看
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24319592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档