2014-11-14 3 views
2

저는 TCL을 처음 사용했습니다. 문자열에서 ","를 검색하고 그 전후에 특정 문자열을 원한다는 것을 알고 싶었습니다. 예 : tampa, floridaTCL의 문자열에서 ','을 찾는 방법

해당 문자열이있는 경우 검색해야합니다. 탬파 및 플로리다를 반환해야합니다. 문자열 대체를 사용할 수는 있지만지도를 작성해야하므로 내 조건에서는 작동하지 않습니다. 탬파 변수의 다른 집합에 대한 플로리다는 인바운드가 문자열 범위를 사용하는 것처럼 보일지조차 모릅니다. .

감사합니다, 아리아

답변

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 명령을 사용할 수 있습니다. 이 그것을 할 한 가지 방법입니다 :이 명령으로 제공

split tampa,florida , 

는 두 문자열 "탬파"를 포함하는 목록을 결과 : 몇 가지 추가 조건이없는 한

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

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 
관련 문제