期望我需要匹配期望以下输出正则表达式与TCL
1/ 5 SOMETEXT Active
我使用以下代码
expect -re "1\/\s+(\d)\s+SOMETEXT\s+Active"
send "\r"
puts $expect_out(0,string)
在这里,我匹配位数“5”从输入文字。
但是,使用此代码,期望无法从输入中找到结果。
期望我需要匹配期望以下输出正则表达式与TCL
1/ 5 SOMETEXT Active
我使用以下代码
expect -re "1\/\s+(\d)\s+SOMETEXT\s+Active"
send "\r"
puts $expect_out(0,string)
在这里,我匹配位数“5”从输入文字。
但是,使用此代码,期望无法从输入中找到结果。
你想expect_out(1,string)
- 这是第一个捕获组
expect_out(0,string)
包含匹配的正则表达式
$ expect
expect1.1> spawn sh -c {echo '1/ 5 SOMETEXT Active'}
spawn sh -c echo '1/ 5 SOMETEXT Active'
4093
expect1.2> expect -re {1/\s+(\d+)\s+SOMETEXT\s+Active}
1/ 5 SOMETEXT Active
expect1.3> puts $expect_out(1,string)
5
expect1.4> puts $expect_out(0,string)
1/ 5 SOMETEXT Active
将正则表达式放在大括号中通常会更好,以避免特殊字符与正则表达式之间的任何冲突以及特殊字符与Tcl之间的冲突。 –
谢谢格伦:) – Dinesh
你必须在这段代码有问题的文字部分;那里有反斜杠需要引用,所以他们去了RE引擎。尝试下列操作之一:还
expect -re "1/\\s+(\\d)\\s+SOMETEXT\\s+Active"
expect -re {1/\s+(\d)\s+SOMETEXT\s+Active}
注意/
是不是特别在所有Tcl的RE引擎或到Tcl的;这只是一个普通的角色。你永远不需要引用它本身(不像\
你需要小心)。
您是否尝试过使用'exp_internal 1'启用调试?这通常足以解决这些问题的底部......它会告诉你什么是匹配,什么是不匹配,你可以从那里获得信息,以调整你的RE。 – James
你期待的Tcl版本是什么? 'puts [info patchlevel]' –