Python正则表达式命名捕获组

2024-09-24 06:34:17 发布

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

我正在学习正则表达式,特别是命名为捕获组。在

我有一个问题,我不知道如何为我的函数findVul()编写if/else语句。在

基本上,代码是如何工作或应该工作的,即findVul()经过data1data2,它们已经被添加到myDATA列表中。在

如果regex找到了与整个命名组匹配的结果,那么它应该打印出结果。它目前工作得很好。在

代码:

import re

data1 = '''

dwadawa231d .2 vulnerabilities discovered dasdfadfad .One vulnerability discovered 123e2121d21 .12 vulnerabilities discovered sgwegew342 dawdwadasf

2r3232r32ee

'''

data2 = ''' d21d21 .2 vul discovered adqdwdawd .One vulnerability disc d12d21d .two vulnerabilities discovered 2e1e21d1d f21f21

'''

def findVul(data):
    pattern = re.compile(r'(?P<VUL>(\d{1,2}|One)\s+(vulnerabilities|vulnerability)\s+discovered)')
    match = re.finditer(pattern, data)

    for x in match:
        print(x.group())


myDATA = [data1,data2] count_data = 1

for x in myDATA:
    print('\n--->Reading data{0}\n'.format(count_data))
    count_data+=1
    findVul(x)

输出:

^{pr2}$

现在我想添加if/else语句来检查整个命名组是否有匹配项。在

我试过这样的方法,但似乎不起作用。在

代码:

def findVul(data):
    pattern = re.compile(r'(?P<VUL>(\d{1,2}|One)\s+(vulnerabilities|vulnerability)\s+discovered)')
    match = re.finditer(pattern, data)

    if len(list(match)) != 0:
        print('\nVulnerabilities Found!\n')
        for x in match:
            print(x.group())

    else:
        print('No Vulnerabilities Found!\n')

输出:

--->Reading data1


Vulnerabilities Found!


--->Reading data2

No Vulnerabilities Found!

如您所见,它没有打印数据1中应包含的漏洞。在

有人能解释一下正确的方法吗?为什么我的逻辑是错误的。 非常感谢:)!!在


Tags: redataifmatchone命名patternprint
2条回答

在@AdamKG回应后,我做了更多的研究。在

我想利用关于芬德尔()功能。在

在关于芬德尔()将返回所有匹配子字符串的列表。在我的例子中,我在命名的捕获组中有捕获组。这将返回一个包含元组的列表。在

例如,以下带有data1的regex:

pattern = re.compile(r'(?P<VUL>(\d{1,2}|One)\s+ 
(vulnerabilities|vulnerability)\s+discovered)')

match = re.findall(pattern, data)

将返回一个包含元组的列表:

^{pr2}$

findVul()的最终代码:

pattern = re.compile(r'(?P<VUL>(\d{1,2}|One)\s+(vulnerabilities|vulnerability)\s+discovered)')
match = re.findall(pattern, data)

if len(match) != 0:
    print('Vulnerabilties Found!\n')
    for x in match:
        print(' > {0}'.format(x[0]))
else:
    print('No Vulnerability Found!\n')

问题是,^{}返回一个迭代器,该迭代器是在执行len(list(match)) != 0测试时计算的;当您在for循环中再次对其进行迭代时,它已经耗尽,并且没有剩余的项。简单的修复方法是在finditer()调用后添加match = list(match)行。在

相关问题 更多 >