/ / Regexp Pattern Matching Tcl - regex, tcl

Dopasowywanie wzorca Regexp Tcl - regex, tcl

Mam dane w formacie file.txt

afsdfds/sfsd/sfdsf/VISA_CTS_ec0cbf000an2n06x5_G3B7I1/sfdfdvged/sdvdsfgv ec0cbf000an2n06x5
afsggggdfds/sfsd/sfdsf/VISA_CTS_ec0clb000an2n10x5_G3B7I1/sfdggggfdvged/sdvdsfgv ec0clb000an2n10x5
afsdfds/fdddo9045374857_234242/sfsd/sfdsf/VISA_CTS_ec0cilb000an2n16x5_G3B7I1/sfdfdvged/sdvdsfgv ec0cilb000an2n16x5
qweryt/visa_ec0ceb000an2n20x5_tyiuop/gfds_sfgds_/clock_VISA_CTS_ec0ceb000an2n20x5_G3B7I1/hjkhfjhfd/asdfasdf ec0ceb000an2n20x5

Używam w Tcl

package require fileutil

set filename file.txt
set pattern {ec0cbf|ec0clb|cb|ceb}
puts "[llength [fileutil::grep $pattern $filename]] occurances"

$tcl> 7 occurances

Chcę tylko najbardziej odpowiednie wartości z pliku.txt zostanie zwrócony przez moje wyrażenie regularne, a moja ostateczna odpowiedź będzie 3 wystąpieniami (ec0cbf000an2n06x5 ec0ceb000an2n20x5 ec0ceb000an2n20x5)) zamiast 7, ponieważ nie wykrywam "cilb"

Ten plik.txt to dynamiczne dane "

Odpowiedzi:

0 dla odpowiedzi № 1

To może rozwiązać twój problem:

set a [open test.txt r]
set data [read $a]
set c [split $data "n"]
set cnt 0

% foreach d $c {
if {[regexp {ec0cbf|ec0clb|cb|ceb} $d]} {
puts "[lindex $d  end]"
incr cnt
}
}
puts $cnt