You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文本列中提取符合格式规则的CVE编号

文本列CVE编号提取实现方案

匹配规则说明

需要提取的CVE编号特征如下:

  • 标准主体结构为CVE-yyyy-xxxxx,其中yyyy为4位年份,后续数字段长度为1-6位不等
  • 常见干扰形式:CVE整体被半角括号()包裹、CVE编号末尾紧跟半角冒号:,提取时需自动过滤这类无关字符
  • 特殊输出要求:样例中第三条输出将CVE与年份之间的横杠替换为空格,可在提取主体后通过简单字符串替换实现

核心实现逻辑

所有场景的核心都是通过正则表达式定位CVE主体,通用匹配正则为:

CVE-\d{4}-\d{1,6}

说明:该正则直接匹配CVE固定结构的主体内容,前后的括号、尾随冒号均不在匹配范围内,无需额外写规则过滤,即可覆盖所有给出的样例场景

常用场景落地代码

1. Python Pandas 表格处理场景

适用于CSV/Excel等结构化表格数据的批量处理,代码如下:

import pandas as pd
import re

def extract_cve(text):
    if pd.isna(text):
        return ""
    match_res = re.search(r"CVE-\d{4}-\d{1,6}", str(text))
    if not match_res:
        return ""
    cve_str = match_res.group()
    # 若需要对齐样例中的空格格式(CVE yyyy-xxxxx),打开下一行注释即可
    # cve_str = cve_str.replace("CVE-", "CVE ", 1)
    return cve_str

# 假设原始文本列名为raw_text,生成新列cve_id
df["cve_id"] = df["raw_text"].apply(extract_cve)

针对给出的样例数据,运行后输出完全匹配预期:

  • 输入the vulnerability name (CVE-2019-0215) → 输出CVE-2019-0215
  • 输入the vulnerability name (CVE-2019-0290) extra words → 输出CVE-2019-0290
  • 输入the vulnerability name CVE-2018-23314: blah blah → 开启替换注释后输出CVE 2018-23314

2. MySQL 数据库字段提取场景

直接使用内置正则函数提取即可:

-- 输出标准CVE格式
SELECT
  raw_text,
  REGEXP_SUBSTR(raw_text, 'CVE-[0-9]{4}-[0-9]{1,6}') AS cve_id
FROM vuln_info_table;

-- 输出CVE与年份间带空格的格式
SELECT
  raw_text,
  REPLACE(REGEXP_SUBSTR(raw_text, 'CVE-[0-9]{4}-[0-9]{1,6}'), 'CVE-', 'CVE ', 1) AS cve_id
FROM vuln_info_table;

3. Excel/WPS 表格处理场景

支持正则函数的版本(365/2021及以上、WPS 2021及以上)可直接使用单元格函数:

// 标准格式输出
=REGEXEXTRACT(A2,"CVE-\d{4}-\d{1,6}")

// 空格格式输出
=REPLACE(REGEXEXTRACT(A2,"CVE-\d{4}-\d{1,6}"),4,1," ")

扩展适配说明

  • 如果单条文本包含多个CVE编号,将正则单次匹配逻辑改为全局匹配,遍历所有匹配结果即可
  • 如果文本中存在全角括号(())、全角冒号(:),现有正则依然可以正常匹配,不需要调整规则
  • 提取结果默认符合MITRE官方CVE编号格式规范,空格格式为定制化需求,按需开启替换即可

内容的提问来源于stack exchange,提问作者Udit Krishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:45:41