試す
% 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 つは、エラーをスローしないように何らかのチェックが必要です。
ドキュメント:
lindex、
regexp、
set、
string、
{*} (構文)、
Tcl 正規表現の構文
Tcl インデックス式の構文:
- ゼロから始まる整数のインデックス番号
end
最後の要素
end
-N最後の要素の前のn番目の要素
end
+N最後の要素からn番目の要素 (実際には、Nは負でなければなりません)
- MN要素m の前のn番目の要素
- M+N要素m の後のn番目の要素
式内に空白を含めることはできません。