안녕하세요, TCL에서 초보자입니다. 코드, 메소드 등을 알려주세요. 예를 들어 문자열이 있습니다 (abcgfhdskls12345) HELLO (hikjkflklfk) (bkjopkjjkl) HI (kjkkjjuilpp)()를 공백으로 바꾸는 TCL 코드
난 그냥 (사이의 모든 것을 제거) 만 하이 인쇄 할 할과 안녕
안녕하세요, TCL에서 초보자입니다. 코드, 메소드 등을 알려주세요. 예를 들어 문자열이 있습니다 (abcgfhdskls12345) HELLO (hikjkflklfk) (bkjopkjjkl) HI (kjkkjjuilpp)()를 공백으로 바꾸는 TCL 코드
난 그냥 (사이의 모든 것을 제거) 만 하이 인쇄 할 할과 안녕
당신은 사용할 수 있습니다 티클 regsub
는 괄호 아무것도를 제거합니다 :
set x "(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)"
regsub -all {\(.*?\)} $x {} x
puts $x
산출되는 :
$ tclsh foo.tcl
HELLO HI
제 제안은 정규식을 기반으로 대체를 수행하는 regsub
명령을 사용하는 것입니다. 당신의 패턴이 소스 문자열에 두 번 이상 나타날 수 있으며 당신은 단지 첫 번째 제거하지 않기 때문에
set str {(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)}
set result [ regsub -all {\(.*?\)} $str {} ]
-all
옵션이 필요합니다 : 당신은 다음처럼 작성할 수 있습니다.
{...}
안에있는 텍스트가 패턴입니다. 대괄호 안에있는 내용과 일치 시키려면 \(...\)
부분을 사용하십시오. 대괄호는 정규 표현식 구문에서 특별한 의미가 있기 때문에 필요합니다.
괄호 안에 당신은 모든 문자가 0 번 이상 반복 일치 할, 그래서 당신은 점이 모든 문자를 의미 .*?
을 가지고 있고 *?
는 제로 또는-이상의 비 욕심 반복 명령입니다.
또한 개폐 괄호에 문자열을 분할하고, 홀수 요소를 던질 수 :
set s "(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)"
foreach {out in} [split $s "()"] {puts $out}
HELLO HI
이것은 또한 유일한 정규 표현식을 사용하는 방법입니다.
set p {(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)}
set pol [regexp {(.*)(HELLO)(.*) (.*)(HI)(.*)} $p p1 p2 p3 p4 p5 p6]
puts "$p3 $p6"
O/P :.? HI HELLO
하면 아마도 '[^()] *'대신에 '*'로 여기에 사용한다; 형식이 잘못된 입력이있을 때 예측 가능한 동작이 더 많습니다. (음, RE 엔진의 비회원에게는 더 예측 가능합니다.) –