如何使用多种数据格式的正则表达式

时间:2016-12-08 16:33:18

标签: python regex

我正在尝试从我监控的网站中提取参考CVE。当row0上的格式像这样 - (参考文献#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)

1 个答案:

答案 0 :(得分:2)

您可以使用

r'\bCVE[\d-]+'

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

或者,您可以使用更精确的

r'\bCVE-\d+(?:-\d+)?'

<强>详情:

  • \b - 领先的字边界
  • CVE- - CVE- substring
  • \d+ - 一位或多位
  • (?:-\d+)? - 可选序列:
    • - - 连字符
    • \d+ - 一位或多位数。

请参阅another demo