我正在尝试从我监控的网站中提取引用 CVE。当 row0 上的格式是这样时,我的正则表达式代码正在工作 -- (Ref. #8957501) (CVE-2015-3600),但是当格式更改为这种格式时,它就坏了 -- (Ref#555237/92073/CVE-2015 -9042)

如何使用两种格式提取 CVE 字符串?

这是我当前的正则表达式代码:

cve_pattern = re.compile(r'(CVE-1999-\d{4,7}|CVE-(200[0-9])-\d{4,7}|CVE-(201[0-9])-\d{4,7})', re.IGNORECASE)
    for cve_number_pattern_match in cve_pattern.finditer(row[0]):
        if cve_number_pattern_match is not None:
            logger.info(cve_number_pattern_match.group(0) + " is located on row " + str(row_num))
            cve_number_list[row_num] = cve_number_pattern_match.group(0)

最佳答案

您可以使用

r'\bCVE[\d-]+'

匹配单词边界、CVE 子字符串和 1+ 位数字或 - 。请参阅 regex demo

或者,您可以使用更精确的
r'\bCVE-\d+(?:-\d+)?'

详细信息 :
  • \b - 前导词边界
  • CVE- - CVE- 子字符串
  • \d+ - 1 个或多个数字
  • (?:-\d+)? - 一个可选序列:
  • - - 一个连字符
  • \d+ - 1 个或多个数字。

  • another demo

    关于python - 如何使用具有多种数据格式的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41044357/

    10-10 17:10