InsightConnect工作流中Python正则提取CVE编号报错‘no such group’的求助
解决Python脚本提取CVE编号的报错问题
报错原因分析
你遇到的no such group错误,核心问题在于:正则表达式里没有定义捕获组(即没有用圆括号()包裹需要提取的子串),但你却尝试调用m.group(1)来获取第一个捕获组的内容。group(0)才是匹配整个正则表达式的结果,而group(1)及以后仅对应正则里显式定义的捕获组。
修正后的脚本方案
这里提供两种可行的修正方式,任选其一即可:
方式1:直接使用group(0)获取完整匹配结果
不需要修改正则,直接用group(0)拿到整个CVE编号:
import re # 实际使用时保留InsightConnect的模板变量,测试时可替换为示例文本 text = "{{[\"Get Vulnerability Content from Rapid7 Vuln DB\"].[content_result].[title]}}" m = re.search(r'CVE-\d{4}-\d{4,7}', text) if m: found = m.group(0) # 输出到InsightConnect的Out变量,方便后续步骤调用 print(found) # 或者通过return返回结构化结果,适配工作流后续步骤: # return {"extracted_cve": found}
方式2:给正则添加捕获组,使用group(1)
如果习惯用捕获组逻辑,给正则里的CVE编号规则加上圆括号即可:
import re text = "{{[\"Get Vulnerability Content from Rapid7 Vuln DB\"].[content_result].[title]}}" # 给整个CVE匹配规则加上捕获组 m = re.search(r'(CVE-\d{4}-\d{4,7})', text) if m: found = m.group(1) print(found) # 同样可以返回结构化结果供工作流使用 # return {"extracted_cve": found}
适配InsightConnect工作流的额外建议
- 循环处理单行文本:当前脚本逻辑已经适配循环执行、每次处理一行的场景,默认会提取当前行中的第一个CVE编号;如果一行里有多个CVE,可改用
re.findall(r'CVE-\d{4}-\d{4,7}', text)获取所有匹配项。 - 输出到后续步骤:在InsightConnect中,建议通过
return语句输出结构化变量(比如示例中的{"extracted_cve": found}),而不是仅用print,这样后续发送到Teams的步骤可以直接引用这个变量,更符合工作流的协作逻辑。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

