我需要匹配以下输出的预期
1/ 5 SOMETEXT Active
我正在使用以下代码
expect -re "1\/\s+(\d)\s+SOMETEXT\s+Active"
send "\r"
puts $expect_out(0,string)
在这里,我匹配输入文本中的数字“5”。
但是,使用此代码,expect无法从输入中找到结果。
答案 0 :(得分:1)
你想要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
答案 1 :(得分:1)
您在此代码中遇到问题;那里有反斜杠需要引用,所以他们去了RE引擎。尝试其中之一:
expect -re "1/\\s+(\\d)\\s+SOMETEXT\\s+Active"
expect -re {1/\s+(\d)\s+SOMETEXT\s+Active}
另请注意,/
对Tcl的RE引擎或到Tcl并不特别;这只是一个普通的角色。你永远不需要引用它(与你需要小心的\
不同)。