2

こんにちは、TCL の初心者です。コードやメソッドについて教えてください。たとえば、(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp) などの文字列があります。

() の間のすべてを削除して、Hi と Hello だけを出力したいだけです

4

4 に答える 4

3

Tclregsubを使用して、括弧で囲まれたものをすべて削除できます。

set x "(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)"
regsub -all {\(.*?\)} $x  {} x
puts $x

これにより、次の結果が得られます。

$ tclsh foo.tcl
HELLO HI
于 2013-10-21T06:06:20.977 に答える
0

私の提案はregsub、正規表現に基づいて置換を実行するコマンドを使用することです。次のように書くことができます。

set str {(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)}
set result [ regsub -all {\(.*?\)} $str {} ]

-allパターンがソース文字列に複数回出現する可能性があり、最初のパターンだけを削除したくないため、このオプションが必要です。

中のテキスト{...}はパターンです。括弧内にあるものは何でも一致させたいので、その\(...\)部分を使用します。ブラケットは正規表現の構文で特別な意味を持つため、エスケープする必要があります。

括弧内では、ゼロ回以上繰り返される任意の文字に一致させたいので.*?、 があります。ここで、ドットは任意の文字を意味し、*?はゼロ回以上の非貪欲な繰り返しコマンドです。

于 2013-10-21T06:08:03.400 に答える
0

これも正規表現のみを使用する方法です。

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: こんにちはこんにちは

于 2015-10-03T09:26:20.510 に答える