/ / TCL Očakávať, že na extrakciu použijeme regulárne výrazy - regex, tcl, expect

TCL Očakávať používanie pravidelných výrazov na extrahovanie reťazcov - regex, tcl, expect

Snažím sa extrahovať reťazce zo súboru, ktorý zodpovedá nasledujúcemu formátu:

AP [1. kúsok]. [2. kúsok]. [3. kúsok]

Napríklad: AP30f7.0df6.e51c

Nasledujúci kód zachytáva všetky údaje zdieľajúce rovnaký riadok ako vyššie uvedený reťazec. Čo môžem urobiť, aby som zastavil zachytávanie akýchkoľvek nežiaducich údajov nájdených na rovnakom riadku ako vyššie uvedený reťazec?

while { [gets $fchan inline] >= 0} {
switch -regexp -- $inline {
AP([a-f0-9]{4}.[a-f0-9]{4}.[a-f0-9]{4}) {
append default_name $inlinen
}
}
}

UPDATE:

Našlo sa riešenie. Pretože každý riadok, ktorý zodpovedá podmienke, ktorú som zadal, začína požadovaným reťazcom, použijem rozsah reťazcov príkaz na extrahovanie iba prvých 16 znakov.

while { [gets $fchan inline] >= 0} {
switch -regexp -- $inline {
AP([a-f0-9]{4}.[a-f0-9]{4}.[a-f0-9]{4}) {
set inline_mod [string range $inline 0 15]
append default_name $inline_modn
}
}
}

odpovede:

1 pre odpoveď č. 1

Na switch príkaz má niekoľko užitočných možností, keď chcete vykonať extrakciu súčasne s porovnaním RE. Mali by ste ich používať najmä na -matchvar voľba.

while { [gets $fchan inline] >= 0} {
switch -regexp -matchvar matched -- $inline {
AP([a-f0-9]{4}.[a-f0-9]{4}.[a-f0-9]{4}) {
# Extract the first and second elements
lassign $matched inline_mod triple
# With your sample of AP30f7.0df6.e51c
#   $inline_mod is "AP30f7.0df6.e51c"
#   $triple is "30f7.0df6.e51c"
append default_name $inline_modn
}
}
}

Na tejto stránke manuálu je niekoľko ďalších príkladov.