web-dev-qa-db-ja.com

特定のパターンを除くすべてを削除する

多くの文字列を含むログファイルがあります。 phone=で始まりDigits=1で終わる文字列を除き、このファイルからすべてを削除します(検索と置換)。

例:phone=97212345678&step=1&digits=1

その文字列を見つけるために(phone=.*digits=1)を使用していますが、動作します!しかし、私は正規表現を見つけて、この文字列以外のすべてを選択し、それらをすべてクリアすることはできませんでした。

サンプルファイル

20
Eyal

特定のテキスト以外のものを削除するには、改行に一致する_._で.*(text_you_need_to_keep).*を使用する必要があります。

Notepad ++では、使用

検索.*(phone=\S*?digits=1).*
置換:_$1_

[〜#〜] note [〜#〜]。は改行に一致オプションはcheckedでなければなりません。

キャプチャパターン内で_\S*?_の代わりに_.*_を使用します。これは、_phone=_から最も近いdigitsまでの空白文字以外の文字をできるだけ少なく一致させるためです。 _.*_は貪欲すぎるため、DOTALLオプションがオンの場合、複数の行にまたがる場合があります。

[〜#〜] update [〜#〜]

Notepad ++で複数テキスト内のパターンの出現を保持したい場合は、次を使用できます。

_.*?(phone=\S*?digits=1)
_

_$1\n_に置き換えます。これにより、必要なサブパターンが最後に出現した後のサブストリング以外のすべての不要なサブストリングを削除になります。

最後のチャンクを削除する必要があります。

_   FIND: (phone=\S*?digits=1).*
REPLACE: $1
_
22

Notepad ++やEditPlusなどのツールを使用している場合、次の正規表現の置換を使用できます。

検索文字列:^phone=(\d+&step=1&)digits=1

置換文字列:\1

1
York Mak

一致を見つける正規表現:

/^phone=.+&digits=1$/

一致以外のファイルを置き換えるには:

/^(?!phone=.+&digits=1$).*/gm

0
Sandip Ransing

次のようなデータがあるとします。

「実行計画[ID = 7420] for 2018年12月6日08:00:00」

数千行から[ID = dddd]部分だけを抽出したい場合。 Notepad ++でctrl + hを押して、置換ウィンドウを開き、正規表現を確認します。

何を見つける:

.*?(\[ID = \d+\]).*

と置換する:

\1

特定の文字列の場合、正規表現は次のようになります。

.*?(phone=.*?digits=1).*
0
ozanmut