python - Python 正则表达式命名捕获组
问题描述
我正在学习正则表达式,特别是命名捕获组。
遇到一个问题,我无法弄清楚如何为我的函数findVul()编写 if/else 语句。
基本上代码的工作方式或应该工作方式是findVul()遍历data1和data2,它们已添加到列表myDATA中。
如果正则表达式找到整个命名组的匹配项,那么它应该打印出结果。它目前完美运行。
代码:
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)
输出:
--->Reading data1
2 vulnerabilities discovered
One vulnerability discovered
12 vulnerabilities discovered
--->Reading data2
现在我想添加一个 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!
正如您所看到的,它不会打印应该在data1中的漏洞。
有人可以解释一下正确的方法以及为什么我的逻辑是错误的。非常感谢 :) !!
解决方案
在@AdamKG 回复后,我做了更多研究。
我想利用 re.findall() 函数。
re.findall() 将返回所有匹配子字符串的列表。就我而言,我在命名的捕获组中有捕获组。这将返回一个包含元组的列表。
例如以下带有 data1 的正则表达式:
pattern = re.compile(r'(?P<VUL>(\d{1,2}|One)\s+
(vulnerabilities|vulnerability)\s+discovered)')
match = re.findall(pattern, data)
将返回一个包含元组的列表:
[('2 vulnerabilities discovered', '2', 'vulnerabilities'), ('One vulnerability
discovered', 'One', 'vulnerability'), ('12 vulnerabilities discovered', '12',
'vulnerabilities')]
我的 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')
推荐阅读
- git - 在 GitHub 上集成 Travis CI 和 Unity 的问题
- python - 如何从 AWS Lambda 刷新 IdToken
- ios - XCFramework 创建错误:库 -arm64_armv7 中的 CodingKeys(stringValue: "SupportedPlatform", intValue: nil) 为空
- rtf - 在 RTF 中搜索和替换文本
- php - PHP $_GET 超全球好奇心
- swiftui - SwiftUI 无法同时满足约束
- javascript - 带有弹出窗口的 3D 动画
- javascript - php javascript更新浏览器中网站所有打开选项卡中的div
- python - 使用输入键问题将数据输入到表中
- wordpress - 将 textarea 的第一行或前 x 个字符添加到 CF7 的另一个输入字段