gpt4 book ai didi

regex - Expect - 如何在一个交互循环中执行多个正则表达式匹配?

转载 作者:太空狗 更新时间:2023-10-29 11:46:44 25 4
gpt4 key购买 nike

我正在尝试在一个交互 session 期间对同一屏幕输出执行多个正则表达式匹配。使用以下代码,我收到错误消息:“不能多次使用 -o”

最终我想从每个输出屏幕中提取几个小数据变量,使用几个正则表达式,详见 this question .我尝试做的事情是否可行,如果可行,正确的语法是什么?

interact {
#...
#... actions during interact loop to perform with variables extracted
#...

#variable extraction from output ------------------------------------
-o -nobuffer -re {(\[1;14H[a-zA-Z0-9]{1})[0-9]{5}} {
#get po number
set poraw $interact_out(0,string)
#get just po out
set po [string range $poraw 6 11]
#switch to lowercase
set po [string tolower $po]
#send_user " stored po: $po"
}

#get cost from po detail
#ex. 001b[14;27H 20.1900
-o -nobuffer -re {(\[14\;27H)[0-9]{0-6}\.{1}[0-9]{4}} {
set pocost $interact_out(0,string)
send_user " stored po cost: $pocost"
}
}

编辑:因此,有效的代码如下所示:

interact {
#...

-o
-nobuffer -re {(\[1;14H[a-zA-Z0-9]{1})[0-9]{5}} {
#get po number
set poraw $interact_out(0,string)
#get just po out
set po [string range $poraw 6 11]
#switch to lowercase
set po [string tolower $po]
}

#get cost from po detail
#ex. 001b[14;27H 20.1900
-nobuffer -re {(\[14\;27H) *[0-9]{0,6}\.{1}[0-9]{4}} {
set pocostraw $interact_out(0,string)
set pocosttrim [string range $pocostraw 7 17]
set pocost [string trimleft $pocosttrim ]
send_user " stored po cost: $pocost"
}
}

最佳答案

来自man expect,关于interact的部分:

The -o flag causes any following key-body pairs to be applied to the output of the current process. This can be useful, for example, when dealing with hosts that send unwanted characters during a telnet session. [emphasis mine]

因此,-o 似乎改变了从它出现的地方到 interact block 结束的行为。因此,它只能出现一次是有道理的。

解决方案现在很明显:将所有 output 表达式放在 interact 的末尾,并在 -o 之前添加 -o第一个。

关于regex - Expect - 如何在一个交互循环中执行多个正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com