0

私は の新しい学習者ですtcl。を使用すると、次のような問題が発生しregsubます。次のシナリオを検討してください。

set test1 [list prefix_abc_3 abc_1 abc_2 AAA_0]

set test2 abc

regsub -all ${test2}_[1-9] $test1  [list] test1

期待した$test1 output is [prefix_abc_3 AAA_0]

ただしregsub、部分的に一致した文字列も削除されていますprefix_abc_3。ここの誰かが、リスト内の正確な単語のみを登録する方法について何か考えを持っていますか?

ネット経由で解決策を見つけようとしましたが、手がかり/ヒントを得ることができませんでした。ここの誰かが私を助けることができれば感謝します。

4

2 に答える 2

1

正規表現の\m と \Mは、それぞれ単語の先頭と末尾に一致します。しかし、 には単語の文字列ではtest1なく、要素のリストがあり、場合によっては違いがあるため、2 つを混在させないでください。lsearchはリストで動作しますregsubが、文字列のみを処理します。

set test1 [list prefix_abc_3 abc_1 abc_2 AAA_0]
set test2 abc
set test1 [lsearch -all -inline -not -regexp $test1 "^${test2}_\[1-9\]\$"]

パターンがそれほど単純な場合は、-glob代わりにオプション (デフォルト) を使用して、-regexpプロセッサー時間を節約できます。

于 2013-07-26T12:19:47.247 に答える