3
$arg=TEST #### Requested, NOT AVAILABLE psy #;

# が動的に生成される場所の上に文字列があります。文字列の置換を行うには、tcl の関数を使用する必要があります。基本的に、上記の式からコンマ(、)を削除して、次のように表示する必要があります

テスト #### 要求された利用できない psy #

これが私がやったことですが、うまくいきません。

regsub -all {"Requested,"} $arg {"Requested"} arg

これは私が関数を参照した場所です: http://www.tcl.tk/man/tcl8.5/TclCmd/regsub.htm

4

3 に答える 3

14

問題はあなたの見積もりです。あなたは実際に文字列(引用符を含む)をチェックしています"Requested,"が、それはあなたが望むものではありません。波括弧(})または二重引用符(")を削除してみてください。

set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg

削除する必要があるのがコンマだけの場合は、それを検索/置換できます(空の文字列に置き換えるだけです"")。

regsub -all "," $arg "" arg

また

regsub -all {,} $arg {} arg

コメント投稿者が述べたように、正規表現には多くのバックスラッシュ(/)が含まれることが多く、{}括弧は引用符と同じように大量の気を散らす余分なバックスラッシュエスケープを必要としないため、一般的なケースでは後者の方が適している可能性があり""ます。

于 2012-04-10T19:02:59.253 に答える
8

正規表現よりも軽量な別のオプションは、[string map]

set arg [string map { , "" } $arg]

グローバルな削除を望まない場合:

set idx [string first , $arg]
set arg [string replace $arg $idx [incr idx]]
于 2012-04-10T22:26:29.250 に答える
-2
set hfkf "555";
set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg
regsub -all {"Requested,"} $arg {"Requested"} arg
于 2014-06-20T11:39:57.520 に答える