如何从字符串中提取数字子字符串,但前提是前一个字符串部分与目标匹配

时间:2013-11-13 16:14:35

标签: regex

所以我试图从TFS中的变更集注释中提取缺陷编号。但是,人们输入数字有几种方式:

  1. "Defect 1321: blah blah blah"
  2. "Fixes HPQC 1427. Logic modified"
  3. "- Bug 976 - Customer"
  4. 我对正则表达式不是很好,所以任何帮助都会很棒。我提前准备了字符串,并将#.删除,因此我可以放心,我正在寻找以(defect|hpqc|bug)开头的内容可选的空格({ {1}})然后一个数字(\s)以空格(\d)结尾,但这不起作用:

    \s

    我只想找到第一场比赛。 我想提取数字组件,但前提是前一个单词匹配。

    我确信这是我对正则表达式创建的琐碎知识的结果。

4 个答案:

答案 0 :(得分:2)

案件很重要(通常)并且你想要多个数字\d+并且还有一个可选的数字符号,所以这样的东西应该有效,具体取决于你的系统:

(Defect|HPQC|Bug)\s*#?\s*(\d+)

这允许空格和#或两者都不在数字之前,并捕获数字。知道你是使用python还是其他东西(标记你的问题)会有所帮助。

答案 1 :(得分:1)

我相信这个正则表达式适合你:

(?:defect|hpqc|bug)\s+(\d+)\s+

缺陷/ Bug#在匹配的组#1中可用

答案 2 :(得分:0)

如果您只想查看关键字之后的数字,那么正则表达式可能会有所帮助......

(?<=(Defect|HPQC|Bug)\s*#?\s*)\d+

祝你好运!

答案 3 :(得分:0)

我精确地对Beroe做出回应:

(?:Defect|HPQC|Bug)\s*\#?\s*(\d+)`

(?:Defect|HPQC|Bug):检测但不捕获

\#:斜杠以禁用评论

它适用于Expresso