Python解析lin中URL中的特定值

2024-09-30 01:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我设法让我的脚本根据行中的内容打印出一行文本:

if "cvename" in line:       
    CVE = list_of_line[4:5]     
    print "The CVE number is ", ' '.join(CVE)       
    print " "
    CVEfile.write("CVE-" + str(CVE) + '\n')

打印出来的是:

^{pr2}$

但我想要的是'1999-0016'的值

我假设可以使用正则表达式来实现这一点,但我在使用它们方面没有太多经验。我注意到,我想要提取的值总是以一年开始,因为它是一个CVE数字


Tags: ofthein文本脚本number内容if
3条回答

在使用正则表达式之前,请始终尝试使用更具体的方法。你需要解析一个网址?使用urlparse。在

import urlparse

u = 'http://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-0016'

q = urlparse.urlparse(u).query
values = urlparse.parse_qs(q).get('name')
if values is not None:
    print values[0]
    # prints '1999-0016'

在这种情况下,可以使用正则表达式,是的:

re.compile(r'name=(\d{4}-\d{4})')

将匹配以name=开头的任何文本,后跟两个4位数字。分组允许您提取该数字:

^{pr2}$

我确实注意到,通常CVE编号的前缀是文本CVE-;匹配这两种形式的正则表达式是:

re.compile(r'name=(?:CVE-)?(\d{4}-\d{4})')

使用正则表达式将允许您从全文中选择这样的url。另一方面,如果您使用的是一个合适的HTML解析器,我建议您改为解析组成部分的url。在

您需要进一步修正解析算法,但要获得值部分:

>>> from urllib2 import urlparse
>>> urlparse.parse_qs(urlparse.urlparse(s).query)['name'][0]
'1999-0016][Xref'

一旦您修复了这个位CVE = list_of_line[4:5],上面的内容将给您预期的结果。在

相关问题 更多 >

    热门问题