2016-08-27 3 views
-2

ich die folgende Zeile in meiner Dateiwie bekomme ich Worte nach wiederholten Texten in einer Linie

Das Bild von Ihnen das Bild passen doesnot ich im Sinne hatte

Ich brauche das Wort zu finden Bild in dieser Zeile und drucken sie das nächste Wort es dh ich brauche das folgende o/p Erfolg:

word_1 = von
word_2 = I

Ich habe regexp Befehl, um das Wort Bild zu finden, aber wie kann ich Wörter finden, die es ohne zu lsearch cmd ??

Antwort

0

Sie müssen den Parameter -inline verwenden, der das Array der Übereinstimmung zurückgibt.

So könnten Sie ein Beispiel hier haben:

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 
} 

eine Liste zu verwenden ist ein flexibler Ansatz, aber wenn Sie bereits über die genaue Anzahl der Wörter kennen, die den Satz übereinstimmen, als die einzelnen Variablen sollte passen Gut.

+0

Kann ich es auf eine Variable wie unten * text1 = von text1 = I * Ich muss jedes Wort auf eine Variable setzen und diese Variable in meinem Skript verwenden – johnny

0

Sie können es wie folgt tun:

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]] 
    } 
} 

Diese Lösung bei jedem Wort in Folge aussieht. Wenn es gleich "image" ist, druckt es das folgende Wort und fährt dann mit dem nächsten Wort in der Liste fort.

bearbeiten

Um jedes gefundene Wort in einer Variablen zu speichern und sofort verwenden, ersetzen puts [lindex $words [incr i]] mit:

 set found [lindex $words [incr i]] 
     # do something with $found 

Um jedes gefundene Wort in einer Liste zu speichern und mit allen Wörtern beschäftigen nach sie alle, ersetzen die gleiche Linie zu finden, mit:

 lappend found [lindex $words [incr i]] 

Es ist eine gute Ideeeinstellenin die leere Liste vor der Suche nach Wörtern.

Dokumentation: < (operator), eq (operator), for, if, incr, lappend, lindex, llength, puts, set, split

+0

Kann ich es auf eine Variable wie folgt setzen * text1 = von * * text1 = I * Ich muss jedes Wort auf eine Variable setzen und diese Variable verwenden in meinem Skript – johnny

Verwandte Themen