0

Tcl の正規表現について質問があります。

first output: TIP_12.3.4 %
second output: TIP_12.3.4 %

出力は次のようになります。

first output: TIP_12 %
second output: TIP_12 %

次の exgexp を使用して 12.3.4 または 12 の数値を取得したい:

output: TIP_(/[0-9].*/[0-9])

しかし、なぜ 12.3.4 または 12% と一致しないのでしょうか?

4

4 に答える 4

2

ドットをエスケープする必要があります。それ以外の場合は、「すべての文字に一致」を表します。また、正規表現のスラッシュについてもわかりません。より良い解決策:

/TIP_(\d+\.?)+/
于 2012-07-06T08:24:21.530 に答える
0

これを試して :

output: TIP_(/([0-9\.^%]*)/[0-9])

グループ 1 をキャプチャします。

ここでデモ:

http://regexr.com?31f6g

于 2012-07-06T08:12:09.837 に答える
0

次の表現は私にとってはうまくいきます:

{TIP_((\d+\.?)+)}
于 2012-07-06T13:33:33.747 に答える
0

あなたの問題は/、Tcl の正規表現言語はまったく特別ではないということです。これは、通常の印刷可能な文字以外の文字です。(正規表現を文字で囲むことは非常に一般的であるため、他の言語では少し異なり/ます。これは Tcl では当てはまりません。) これは単純なリテラルであるため、RE で使用すると、入力でそれを期待するようになります (にもかかわらずそこにはありません); 当然のことながら、これにより RE が一致しなくなります。

output: TIP_([\d.]+)修正:データが適切にフォーマットされているという前提で、次のような正規表現を使用します。これは、次のようなコードになります。

regexp {output: TIP_([0-9.]+)} $input -> dottedDigits

ここでは、括弧で囲まれていないものはすべてリテラルであるため、コードは一致するものを見つけることができます。括弧 (後で保存するビット) 内には、1 つ以上の数字またはピリオドが必要です。それらを角括弧セットの中に入れるのは完璧で簡単です。正味の効果は12.3.4、 を変数に格納しdottedDigits(見つかった場合)、一致したかどうかを示すブール値の結果を生成することです (つまり、便利に条件に入れることができますif)。

注:角かっこはTcl 言語のメタ文字でもあるため、正規表現は中かっこで囲まれています。RE を中かっこで囲むと、スクリプトの誤解による問題が回避されます。(代わりにバックスラッシュを使用することもできますが、見苦しくなります…)

于 2012-07-07T07:44:34.350 に答える