Python 不同空间的正则表达式

Python 不同空间的正则表达式,python,regex,space,Python,Regex,Space,我有两条线: str1 = 'sleep_clk prepare:enable cnt [0:0] rate: vdd_level [32764:0]' and str2 = 'cxo_clk_src prepare:enable cnt [6:6] rate: vdd level [19200000:0]' 和正则表达式: pat = re.compile(r"\s*(?P<clock>\w+).+?(?=cnt)cnt\s*\[\s*(?P<prepare

我有两条线:

str1 = 'sleep_clk   prepare:enable cnt [0:0]    rate: vdd_level [32764:0]'
and str2 = 'cxo_clk_src prepare:enable cnt [6:6]    rate: vdd level [19200000:0]'
和正则表达式:

pat = re.compile(r"\s*(?P<clock>\w+).+?(?=cnt)cnt\s*\[\s*(?P<prepare>\d+)\s*:\s*(?P<enable>\d+)\s*\]\s*rate: vdd level \[(?P<frequency>\d+):(?P<vdd_level>\d+)\]")
但对于str1,我没有得到任何对象:

print str1
sleep_clk   prepare:enable cnt [0:0]    rate: vdd_level [32764:0]
m = pat.search(str1)
m.groupdict()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groupdict'
打印str1
睡眠时钟准备:启用cnt[0:0]速率:vdd_电平[32764:0]
m=部分搜索(str1)
m、 groupdict()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“非类型”对象没有属性“groupdict”
我做错了什么? 谢谢你的帮助
蒂亚

如果您在
vdd
级别之间添加
[\u]
,则此功能有效。或者,如果您不确定两者之间可能存在什么,则可能是

s*(?P<clock>\w+).+?(?=cnt)cnt\s*\[\s*(?P<prepare>\d+)\s*:\s*(?P<enable>\d+)\s*\]\s*rate: vdd[_ ]level \[(?P<frequency>\d+):(?P<vdd_level>\d+)\]
s*(?P\w+)+?(?=cnt)cnt\s*\[\s*(?P\d+)\s*:\s*(?P\d+)\s*)\s*速率:vdd[(P\d+):(?P\d+)]

此外,您的查询所做的工作是所需工作的30倍左右。如果捕获的是第一个单词,再加上两组格式为[#::#]的数字,则可以在模式之间使用
[^[]*
读取下一个“[”,并忽略其他字符串格式,如下图所示

^\s*(?P<clock>\w+)[^\[]*\[\s*(?P<prepare>\d+)\s*:\s*(?P<enable>\d+)\s*\][^\[]*\[(?P<frequency>\d+):(?P<vdd_level>\d+)\]
^\s*(?P\w+[^\[]*\[\s*(?P\d+)\s*:\s*(?P\d+)\s*\[^\[]*[(?P\d+):(?P\d+)]

这将使它从大约19400个步骤降低到大约60个步骤。

但是你想匹配什么?这个网站对正则表达式的开发非常有帮助:我认为@Rahul的意思是什么是预期的输出…你想从字符串中提取什么?
^\s*(?P<clock>\w+)[^\[]*\[\s*(?P<prepare>\d+)\s*:\s*(?P<enable>\d+)\s*\][^\[]*\[(?P<frequency>\d+):(?P<vdd_level>\d+)\]