Python正则表达式多组模式findall()返回空列表

Python正则表达式多组模式findall()返回空列表,python,regex,Python,Regex,我尝试使用Regex多组模式从一行中提取不同的CPU规格,但得到的是一个空列表。当我单独尝试各个组时,我能够提取相应的值。我应该如何在这里使用多组模式?请帮忙 import re line = "R7000 CPU at 160MHz, Implementation 39, Rev 2.1, 256KB L2, 512KB L3 Cache" pat_cpu_values_combined = r"(?P<freq>\s+\w+Hz)(?P<L2>\s+\w+\s+L

我尝试使用Regex多组模式从一行中提取不同的CPU规格,但得到的是一个空列表。当我单独尝试各个组时,我能够提取相应的值。我应该如何在这里使用多组模式?请帮忙

import re

line = "R7000 CPU at 160MHz, Implementation 39, Rev 2.1, 256KB L2, 512KB L3 Cache"

pat_cpu_values_combined = r"(?P<freq>\s+\w+Hz)(?P<L2>\s+\w+\s+L2)(?P<L3>\s+\w+\s+L3)"
pat_cpu_freq = r"(?P<freq>\s+\w+Hz)"
pat_cpu_l2 = r"(?P<L2>\s+\w+\s+L2)"
pat_cpu_l3 = r"(?P<L3>\s+\w+\s+L3)"

# empty list coming when pat_cpu_values_combined is searched

print re.findall(pat_cpu_values_combined, line)

# below individual group pattern findall are working fine

print re.findall(pat_cpu_freq, line)
print re.findall(pat_cpu_l2, line)
print re.findall(pat_cpu_l3, line)
重新导入
line=“160MHz下的R7000 CPU,实现39,版本2.1,256KB二级缓存,512KB三级缓存”
pat\U cpu\U值组合=r“(?P\s+\w+Hz)(?P\s+\w+\s+L2)(?P\s+\w+\s+L3)”
pat_cpu_freq=r“(?P\s+\w+Hz)”
pat_cpu_l2=r“(?P\s+\w+\s+l2)”
pat_cpu_l3=r“(?P\s+\w+\s+l3)”
#搜索pat\u cpu\u值\u组合时出现空列表
打印有关findall的内容(部分cpu值组合,行)
#在个人分组模式下,findall工作正常
打印有关findall的信息(按cpu频率,行)
关于findall的打印(第二行)
关于findall的打印(第三行)

您的组合正则表达式正在查找这些模式中的每一个,它们被粉碎在一起,没有中间字符。您可以使用
|
分隔符组合模式

pat_cpu_values_combined = r"(?P<freq>\s+\w+Hz)|(?P<L2>\s+\w+\s+L2)|(?P<L3>\s+\w+\s+L3)"

[''.join(g) for g in  re.findall(pat_cpu_values_combined, line)]
# returns:
[' 160MHz', ' 256KB L2', ' 512KB L3']
pat\u cpu\u值组合=r“(?P\s+\w+Hz);(?P\s+\w+\s+L2);(?P\s+\w+\s+L3)”
[''.join(g)代表g在关于findall(pat\u cpu\u value\u combined,line)]
#返回:
['160MHz','256KB L2','512KB L3']

当您组合它们时,您没有考虑要匹配的内容之间的字符。尝试对组合正则表达式使用此选项:

(?P<freq>\s+\w+Hz).*?(?P<L2>\s+\w+\s+L2).*?(?P<L3>\s+\w+\s+L3)
(?P\s+\w+Hz)。*?(?P\s+\w+\s+L2)。*?(?P\s+\w+\s+L3)

pat\u cpu\u values\u combined
期望与三个单独模式匹配的字符串不会出现在它们之间

如果要按该顺序查找所有三个,请使用以下命令:

pat_cpu_values_combined = r"(?P<freq>\s+\w+Hz).*?(?P<L2>\s+\w+\s+L2).*?(?P<L3>\s+\w+\s+L3)"
pat\u cpu\u值组合=r“(?P\s+\w+Hz)。*?(?P\s+\w+\s+L2)。*?(?P\s+\w+\s+L3)”

没问题。请记住将问题标记为已回答。这对我不起作用,使用此模式,我将得到空列表。