1

最初のタイマーであり、RegExとNotepad++の経験が比較的少ない。私がやろうとしているのは、これら2つのファイアウォールセッションのポリシー番号以外のすべてを置き換えることです。念のために言っておきますが、700行以上の長さの複数のリストがあるので、各行のポリシー番号だけを残して、すべてを1回のパスで置き換えたいと思います。

id 1978781/s23,vsys 0,flag 00200440/4000/0003,policy 4332,time 5972, dip 0 module 0
id 1997645/s23,vsys 0,flag 00200440/4000/0003,policy 30562,time 6283, dip 0 module 0

何千もの異なるポリシー番号があるので、単純な検索ではうまくいきません。

交換後のラインはこんな感じにしたいと思います。

4332
30562

この1つの問題についてRegExを2時間学習しようとした後、これは予想よりも複雑であることに気付きました。非常に強力なツールであるため、これを学習するために時間を費やす必要があります。これは本当に多くの時間を節約することができましたが、残念ながら現時点ではありません。私はRegExについてもっと学ぶことを楽しみにしており、あなたが私に与えることができるどんな助けや指示にも感謝します。

4

2 に答える 2

4

線が常に同じに見えるという事実を考えると、次を使用できます

^.+policy (\d+).+$

に置き換えます:$1

ドットはワイルドカードなので、.+「ポリシー」という単語の前にあるすべてのものを見つけることを意味します。次に、数字のグループを見つけて(数字\d+を見つけるためのものです)、それらを保存します(これは、多くの正規表現エンジンでの括弧の目的です)。次に、行末までのすべての文字を検索します。

^文字は行の始まりを意味します。$行末を意味します。

于 2013-02-14T21:48:08.077 に答える
3

次のことを試すことができます。

探す:

^.*policy ([0-9]+).*$

と置換する:

\1

なぜこれが機能するのですか?

ドットは任意の文字と一致し、星はその前の文字の「ゼロ以上」を意味します。これは、すべて.*に一致することを意味します。

必要なのは、ポリシーの前後のすべてを一致させて消去し、ポリシー番号だけを保持することです。したがって、すべての一致者の間で、文字列「policyxxxxx」を探します。ここでxxxxxは数字です。

正規表現で括弧で囲まれた各用語は、置換で使用するために保存されます。ナンバーマッチャーを括弧で[0-9]+囲み、repace部分で一致したものを。で使用し\1ます。正規表現にいくつかの括弧で囲まれた部分が含まれている場合は、、、..でそれらを取得\1できます\2\3

正規表現は非常に強力です。正規表現についてのチュートリアルを読んで、正規表現が何を提供できるかを学ぶ必要があります。

于 2013-02-14T21:43:26.917 に答える