我的文件中有以下行
您的图像与我想到的图像不匹配
我需要在这一行找到单词image并打印接下来的单词 即我需要以下o / p:
word_1 =
word_2 =我
我有regexp命令找到 image 这个词,但是如何在不使用lsearch cmd的情况下找到继续它的单词?
答案 0 :(得分:0)
您必须使用返回匹配数组的参数 -inline 。
所以你可以在这里举个例子:
set text "The image of yours doesnot match the image I had in mind"
set i 0
set word_1 ""
set word_2 ""
set words [list ]
foreach {img _get} [regexp -all -inline -- {image ([a-zA-Z]+)} $text] {
# print out the word after "image"
puts $_get
# this if you want to save in a list
lappend words $_get
# here you can save on separate variables
if {$i == 0} {
set word_1 $_get
} else {
set word_2 $_get
}
incr i
}
使用列表是一种更灵活的方法,但如果您已经知道与该句子匹配的单词的确切数量,那么单个变量应该很合适。
答案 1 :(得分:0)
你可以这样做:
geom_*()
此解决方案按顺序查看每个单词。如果它等于"图像"它打印出以下单词,然后继续列表中的下一个单词。
修改强>
要将每个找到的单词保存在变量中并立即使用,请将set txt {The image of yours doesnot match the image I had in mind}
set words [split $txt]
for {set i 0} {$i < [llength $words]} {incr i} {
if {[lindex $words $i] eq "image"} {
puts [lindex $words [incr i]]
}
}
替换为:
puts [lindex $words [incr i]]
要将每个找到的单词保存在列表中并在找到所有单词后处理所有单词,请将以下行替换为:
set found [lindex $words [incr i]]
# do something with $found
在搜索单词之前,将 lappend found [lindex $words [incr i]]
设置为空列表是个好主意。
文档: < (operator), eq (operator), for, if, incr, lappend, lindex, llength, puts, set, split