1

私はこの文字列を持っています:

svpts-7-40.0001

そして、これから 2 番目の「-」を削除する必要があります。基本的に、私はこれらのような値をフェッチしています。したがって、そのような変数が見られる場合は、2 番目の「-」を削除して、同じものを「.」に置き換える必要があります。、したがって、文字列は次のようになります。

svpts-7.40.0001

[編集]私は試しました:

% set list1 [split $string -]
svpts 7 40.0001
% set var2 [join $list1 .]
svpts.7.40.0001
%
4

2 に答える 2

0

試す

% set data svpts-7-40.0001
svpts-7-40.0001
% regexp {([^-]*-)(.*)} $data -> a b
1
% set b [string map {- .} $b]
7.40.0001
% set newdata $a$b
svpts-7.40.0001

上記のコードは、最初のハイフンの後にすべてのハイフンを変更します。2 番目のハイフンだけを変更するには、次のようにします。

set idx [string first - $data [string first - $data]+1]
set newdata [string replace $data $idx $idx .]

またはこれ:

set idxs [lindex [regexp -inline -all -indices -- - $data] 1]
set newdata [string replace $data {*}$idxs .]

データ文字列に少なくとも 2 つのハイフンが含まれていない場合、最初のスニペットは適切に動作します。もう 1 つは、エラーをスローしないように何らかのチェックが必要です。

ドキュメント: lindexregexpsetstring{*} (構文)Tcl 正規表現の構文

Tcl インデックス式の構文:

  • ゼロから始まる整数のインデックス番号
  • end最後の要素
  • end-N最後の要素の前のn番目の要素
  • end+N最後の要素からn番目の要素 (実際には、Nは負でなければなりません)
  • MN要素m の前のn番目の要素
  • M+N要素m の後のn番目の要素

式内に空白を含めることはできません。

于 2016-11-10T12:53:22.937 に答える