正規表現を使用して文字列からサブ文字列を抽出しようとしています。以下Python
(与え所望の結果)の作動コードTCLでPerlとPythonとで動作が異なる正規表現パターン
Pythonの溶液である
x = r'CAR_2_ABC_547_d'
>>> spattern = re.compile("CAR_.*?_(.*)")
>>> spattern.search(x).group(1)
'ABC_547_d'
>>>
Perlのソリューション
$ echo "CAR_2_ABC_547_d" | perl -pe's/CAR_.*?_(.*)/$1/'
ABC_547_d
TCLソリューション
しかし、IあなたにしようTcl
でこのアプローチを傾けて、私は別の結果を与えています。誰かがこの動作
% regexp -inline "CAR_.*?_(.*)" "CAR_2_ABC_547_d"
CAR_2_ {}
私の要件は、サブを抽出することです文字列 "ABC_547_d"。私は貪欲でないように意図的に '?'を使っています。私はちょうどそれがPythonではなくTCLで動作する理由を理解したいと思います – sarbjit
これは 'Tcl'に関するものです。最初の数量子は非貪欲なので、 '。*'は空文字列にのみマッチします。 '。+'を使用した場合、それはあなたに文字 'A'だけを与えます。 – Dinesh
Tcl regex with groupingメソッドを使用して目的の結果を達成する方法をお勧めしますか? PerlとPythonで動作するオリジナル正規表現を見ることができます。 TCLは正規表現を扱う方法が異なりますか? – sarbjit