2

私は次のような文字列を持っています

-------- AGG x y PORT-16385-INFO    ----------------------------+

「AGG xy PORT-16385-INFO」を抽出したい。ただし、このパターンは同じではありません。間に任意の数のスペースを含めることができます。

文字列を取得するための正規表現を手伝ってください。

私はこの正規表現を使用しています

regexp {\s+(.*)\-\-*} $a - am

出力

AGG PORT-16385-INFO    ---------------------------

これは私が望んでいません。正規表現で私を助けてください。

4

3 に答える 3

4

デリミタの長さは少なくとも 2 つ-あり、コンテンツとはスペースで区切られていると仮定します。次に、次のような簡単な正規表現

--\s+(.*?)\s+--

すでに機能します。量指定子は、*?可能な限り早く終了するために、貪欲でないマッチングを行います。

この正規表現が機能するかどうかは、許可された値と入力の正確な形式に大きく依存しますが、これについては十分に説明していません。

また、あなたがこれを Perl としてタグ付けしたことにも驚いています — あなたのコードが有効な Perl コードではないことは確かです。


文字クラスを使用したくない場合は、.ハイフン以外のすべての文字、または単一のハイフンの後にハイフン以外が続く文字に一致するように書き直すことができます。

--\s+((?:[^-]+|-[^-])*)\s+--

正規表現の視覚化

ハイフンに沿った改行も禁止したい場合があります。

于 2013-08-26T09:36:40.080 に答える
3

.*?amon が言うように、使用はうまくいきます。アンカーを使用して、貪欲な量指定子に同じことをさせることができます。

^-+ (.*) -+\+$

ここでは、文字列が指定された一連のダッシュ (および最後にプラス記号) で開始および終了する必要があるため、貪欲な一致が過度に一致することは許可されていません。

于 2013-08-26T09:49:53.443 に答える
1

Tcl では、文字列トリムを使用して簡単に処理できます。

set a "-------- AGG x y PORT-16385-INFO    ----------------------------+"
set b [string trim $a +-]; # to remove all + and -
set b [string trim $b]; # to remove all the white spaces
puts $b
于 2013-08-26T11:45:01.467 に答える