如何在一行中重复文本后得到单词

时间:2016-08-27 16:00:43

标签: tcl

我的文件中有以下行

您的图像与我想到的图像不匹配

我需要在这一行找到单词image并打印接下来的单词 即我需要以下o / p:

word_1 =
word_2 =我

我有regexp命令找到 image 这个词,但是如何在不使用lsearch cmd的情况下找到继续它的单词?

2 个答案:

答案 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)forifincrlappendlindexllengthputssetsplit