我正在尝试从我监控的网站中提取参考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)
答案 0 :(得分:2)
您可以使用
r'\bCVE[\d-]+'
匹配单词边界,CVE
子字符串和1+位数或-
。请参阅regex demo。
或者,您可以使用更精确的
r'\bCVE-\d+(?:-\d+)?'
<强>详情:
\b
- 领先的字边界CVE-
- CVE-
substring \d+
- 一位或多位(?:-\d+)?
- 可选序列:
-
- 连字符\d+
- 一位或多位数。请参阅another demo。