我一直在努力想办法解决这个问题,但由于我在regex是个新手,我一直没能做到。我需要选择一些telnet输出的正确行,如下所示:
systemstatus get resume # line to exclude
systemstatus get idle # line to filter
systemstatus get talking # line to filter
systemstatus get ringing # line to filter
systemstatus get outgoing # line to filter
systemstatus get sleeping # line to filter
如你所见,我需要排除一个与简历和选择所有其他。所以我知道我可以按长度过滤,但我只知道如何过滤比某物大的长度,而不是许多长度。例如:"systemstatus get \w{7,}"
将排除resume
行,但也排除idle
行。所以实际上我需要能过滤4,7和8的长度。在
有人知道怎么做吗?在
注意:由于telnet库的原因,这必须在regex中完成。
注2:由于是telnet,所以当systemstatus get resume
出现时,我必须继续阅读(这就是我所说的“排除”),而不是像{telnet.expect([], timeout)
。在
虽然正则表达式功能强大,但实际上并不需要正则表达式,只需拆分、应用和组合即可:
这就产生了
^{pr2}$除非您碰巧没有
systemstatusresumesystem get idle
(意思是resume
没有任何单词边界)这样的文本,否则就不需要正则表达式引擎的开销。时间不同方法(每种10万)产生收益
所以非正则表达式的解只需要一半的时间。在
使用零宽度负前瞻(
(?!resume(?:\s|$))
)来确保resume
不在systemstatus get
之后:Demo
选项1
用
re.MULTILINE
开关调用re.findall
。在它以字符串列表的形式返回每个匹配项。在
正则表达式详细信息
^{pr2}$因为你的要求,我们这里按字号匹配-
选项2
将多行字符串拆分为单独的行,遍历每一行并调用
re.match
相关问题 更多 >
编程相关推荐