「aab」のようなランダムな式があり、この式から「ab」を削除する必要があります。この目的で「string trimright」を使用する方法はありますか? (最初の文字「a」が必要です)。
3 に答える
いいえ、使用できませんstring trimright
。マニュアルページにあるように、2番目の引数に属する末尾の文字をすべてstring trimright
削除します。したがって、あなたがする場合
string trimright a.a.b a.b
、、、またはのいずれかの末尾から開始してa.a.b
削除し、空の文字列を残します。a
.
b
必要なことを実行するには、次のregsub
コマンドで正規表現を使用できます。
regsub {a\.b$} a.a.b ""
あなたに正しい文字列を与えます
a.
正規表現(最初の引数)は次のように述べています。a
文字を取り、その後にリテラル文字(任意の文字を意味する.
ため、バックスラッシュでエスケープ) 、文字列の最後に。( )が続きます。.
b
$
a
このようにして、と文字に限定されませんがb
、より一般的にすることもできます。
regsub {.\..$} $string ""
末尾にある特定の文字列を削除するには、使用しませんstring trimright
(2 番目の引数は実際には文字セットであり、たまたま文字列として書き込まれるだけです)。代わりに、次のregsub
ようなコードを使用する必要があります。
proc removeIfLast {mainString toRemove} {
set r [string length $toRemove]
if {$toRemove eq [string range $mainString end-[expr {$r-1}] end]} {
return [string range $mainString 0 end-$r]
}
return $mainString
}
次に、これを行います (対話型セッションから):
% removeIfLast "a.a.b" "a.b"
a.
文字のパターンが常に"<something> .*<something>...*" であり、最初の<something>だけが必要な場合は、次のようにするのが最適です。
lindex [split $input .] 0
これにより、入力がピリオドで分割され、最初の要素が得られます。