我正在尝试从我监控的网站中提取引用 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/