2014-11-14 2 views
2

Я новичок в TCL, просто хотел знать, как мы можем искать «,» в строке и хотим, чтобы конкретная строка была до и после. Пример: tampa, floridaКак найти ',' в строке в TCL

Он должен искать, если в этой строке, если есть, он должен возвращать тампу и флориду, мы можем использовать замену строки, но она не будет работать в моем состоянии, потому что мне нужно сопоставить, тампа и florida к различным наборам переменных, даже не знаю, как входящий будет выглядеть так, как использовать диапазон строк. .

Спасибо, Arya

ответ

3

Самый короткий фрагмент кода, чтобы сделать это было бы использовать регулярные выражения:

if {[regexp {(.+),(.+)} $string a b c]} { 
    # $a is the complete match. But we don't care 
    # about that so we ignore it 

    puts $b; #tampa 
    puts $c; #florida 
} 

Регулярное выражение (.+),(.+) означает:

(
    . any character 
    + one or more of the above 
) save it in a capture group 
, comma character 
(
    . any character 
    + one or more of the above 
) save it in a capture group 

Смотрите документацию синтаксис регулярного выражения в tcl для получения дополнительных сведений о регулярных выражениях: https://www.tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm


Но если вы не знакомы с регулярными выражениями и хотите альтернативный способ сделать это, вы можете использовать различные команды string. Это один из способов сделать это:

set comma_location [string first "," $string] 
if {$comma_location > -1} { 
    set a [string range $string 0 [expr {$comma_location -1}] 
    set b [string range $string [expr {$comma_location +1}] end] 
    puts $a; #tampa 
    puts $b; #florida 
} 
4

Если нет какого-то дополнительное условие, вы могли бы сделать это следующим образом:

split tampa,florida , 

Эта команда дает в результате список, содержащий две строки «Тампы» и "флорида".

Документация: split

0

Вариант последнего ответа slebetman в.

proc before_after {value find {start 0}} { 
    set index [string first $find $value $start] 
    set left_side [string range $value $start [expr $index - 1]] 
    set right_side [string range $value [expr $index + 1] end] 
    return [list $left_side $right_side] 
} 

puts [before_after "tampa,fl" ","] 

выход:

tampa fl 
Смежные вопросы