1

「aab」のようなランダムな式があり、この式から「ab」を削除する必要があります。この目的で「string trimright」を使用する方法はありますか? (最初の文字「a」が必要です)。

4

3 に答える 3

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 ""
于 2012-11-05T09:01:19.203 に答える
2

末尾にある特定の文字列を削除するには、使用しません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.
于 2012-11-05T11:51:58.180 に答える
1

文字のパターンが常に"<something> .*<something>...*" であり、最初の<something>だけが必要な場合は、次のようにするのが最適です。

lindex [split $input .] 0

これにより、入力がピリオドで分割され、最初の要素が得られます。

于 2012-11-05T13:52:22.133 に答える