Sie könnten ein Array verwenden, um die Informationen zu speichern, während Sie in sind zu sammeln.
Die regexp Sie verwenden falsch ist.
Verwenden Sie eine Liste von Listen, um die Übereinstimmung paarweise zu sammeln (z. B. Wort #n), und weisen Sie dann alle gesammelten Übereinstimmungen dem richtigen Schlüssel im Array zu. Hier
ist ein Beispiel, wie man es tun:
set file_content {Anny : dancing
Sonny : reciting
Joel : dancing
Anny : reciting
Anny : singing
}
array set res {}
set anny {}
lappend anny [list dancing [regexp -all {Anny\s*:\s*dancing} $file_content] ]
lappend anny [list singing [regexp -all {Anny\s*:\s*singing} $file_content] ]
lappend anny [list reciting [regexp -all {Anny\s*:\s*reciting} $file_content] ]
set res(Anny) $anny
puts [array get res]
Wenn ich diese laufen die Ausgabe lautet:
Anny {{dancing 1} {singing 1} {reciting 1}}
Nun könnte man das Array verwenden, um die Ausgabe zu formatieren wie du möchtest.
Natürlich sollten Sie das gleiche mit anderen Namen tun, so ist das Beste, den Code in eine Funktion zu setzen.
Wo ist dein Problem? –
Ich versuchte es mit llength [regexp -all tanzend Anny], aber es scheint nicht zu funktionieren. Es passt entweder einmal oder gar nicht. Ich habe Dutzende ähnlicher Vorkommen, aber die Anzahl ist falsch – johnny
Wie nicht verstehen, wie Ihre Regexp übereinstimmen könnte. –