web-dev-qa-db-ja.com

複数行の正規表現の検索と置換!

壁にぶつかった。 Notepad ++のように検索と置換を行うだけでなく、複数行の正規表現検索と置換を実行できる優れたテキストエディタを知っている人はいますか?基本的に、私は次のような正規表現に一致するものを見つけようとしています:

検索oldlog\(.*\n\s+([\r\n.]*)\);
置換newlog\(\1\)

何か案は?

27
Scott

私の個人的な推奨事項は、IDM ComputingのUltraEdit( www.ultraedit.com )です。これは、Perl、Unix、およびUltraEdit構文で正規表現(検索と置換の両方)を実行できます。複数行のマッチングは、Perl正規表現モードの機能の1つです。

また、他のニース検索機能(特定の文字列範囲での検索、複数のファイルでの検索、検索履歴、お気に入りの検索など)も備えています。

alt text
(ソース: ltraedit.com

5
DVK

Notepad ++は複数行の正規表現を処理できるようになりました(最新バージョンに更新するだけです-この機能は3月12日頃に導入されました)。

HTMLドキュメントからすべてのonmouseoutステートメントとonmouseoverステートメントを削除する必要があり、貪欲でない複数行の一致を作成する必要がありました。

onmouseover =。?\ s * "。*?"

以下を確認してください。

[]。改行に一致
10
Mark Salisbury

EditPad Pro は、これまでに使用した他のどのエディターよりも優れた正規表現機能を備えています。

また、正規表現にエラーがあると思います— [\r\n.]は、改行、改行、およびフルストップのみに一致します。任意の文字(つまり、「ドット演算子とCRとLF」に一致させる)を試みる場合は、[\s\S]代わりに。

8
Ben Blank

Notepad ++がTextFXプラグイン(デフォルトで含まれています)を介してこれを実行できると確信しています。 Notepad ++でControl-Rを押して、遊びます。

5
Michael

Zeus エディターは、multi-line検索と置換を実行できます。

5
jussij

私は Eclipse を使用します。これは無料であり、開発者であれば既に持っているかもしれません。 '\ R'は、プラットフォームに依存しない行区切り文字として機能します。複数行検索の例を次に示します。

探す:

\ bibitem。(\ R。)?\ R?{([^ {])} $\R ^([^ \]。[^}] $\R。$\R。

そして置き換えます:

\ defcitealias {$ 2} {$ 3}

5
Vladtn

TextPad には、優れた正規表現検索および置換機能があります。しばらく使ってみて、とても満足しています。

TextPad screenshot

機能 から:

エディターマクロの機能を備えた、UNIXスタイルの正規表現を使用した強力な検索/置換エンジン。ディレクトリツリー内のファイルセットを検索したり、開いているすべてのドキュメントのテキストを一度に置換したりできます。

必要以上のオプションについては、 AlternativeTo.net で " Notepad ++ Alternatives "を確認してください。

4
Donut

私はいつもNotepad ++を使用していますが、Regexは常に少し不足しています。

崇高なテキスト はあなたが望むものです。

2
opticyclic

Pythonマルチライン正規表現検索用スクリプトプラグインを使用して置換できます!- http://npppythonscript.sourceforge.net/docs/latest/scintilla.html?highlight=pymlreplace# Editor.pymlreplace

# This example replaces any <br/> that is followed by another on the next line (with optional spaces in between), with a single one
editor.pymlreplace(r"<br/>\s*\r\n\s*<br/>", "<br/>\r\n")
2
pra

EditPlus 正規表現(複数行を含む)を使用した検索/置換でうまく機能します

1

Visual Studioを使用できます。コピーがない場合は、Expressを無料でダウンロードしてください。

VSの正規表現は非標準なので、代わりに\ n:b + [\ r\n]を使用する必要があります。

0
Shane Castle

ED for windowsには正規表現の2つのバージョンがあり、3種類の切り取りと貼り付け(選択、線、またはブロック、そして強調表示しているときにマウスをクリックするだけで、次から次へと移動できます(ウルトラ編集とは異なります))。 -メニューをプルダウンする必要はありません。Kindleで読むのと同じように、仕事を完了するための非常に速いスピードは信じられないほどです。

0
Marc Plimsoll

Notepad ++の最新バージョン(私のバージョンは6.2.2)を使用できます。

別の回答で提案されているように、オプション「。match newline」を使用する必要はありません。代わりに、「行の先頭」には^、「行の終わり」には$を含む適切な正規表現を使用してください。次に、dosファイルの「改行」の$の後に\ r\nを使用します(または、キャリッジリターンは主にdos/windowsテキストファイルに使用されるため、UNIXファイルでは\ nのみです)。

例:タグUIDで始まる行の後にタグOBJEで始まるすべての行を削除するために(系図で使用されるgedcomファイルから)、次の検索正規表現を使用しました。

^UID (.*)$\r\n^(OBJE (.*)$\r\n)+

そして、次の値を置き換えます:

UID \1\r\n

これは次のような行に一致します。

UID 4FBB852FB485B2A64DE276675D57A1BA
OBJE @M4@
OBJE @M3@
OBJE @M2@
OBJE @M1@

そして、置換の出力は

UID 4FBB852FB485B2A64DE276675D57A1BA

550個のインスタンスが1秒未満で置き換えられました。 Notepad ++は本当に効率的です!

それ以外の場合、正規表現を検証するには、.Net RegExテスター( http://regexhero.net/tester/ )を使用したいと思います。 Reg Exを書いてその場でテストするのは本当に素晴らしいです...

PS .:また、[\s\S]正規表現で改行を含むすべての文字に一致させます。したがって、「xxx」で始まり「abc」で終わる「複数行」のテキストのブロックを探す場合、次の正規表現で問題ありません:^xxx[\s\S]*?abc$ どこ "*?"は、xxxとabcの間でできるだけ一致しないようにします!!!

0
Valery Letroye

最新バージョンの ltraEdit には、正規表現サポート付きの複数行の検索と置換があります。

または、このためのより特殊な正規表現ツールを使用しても問題ない場合は、 Regex Hero があります。すべてをその場で実行できるという副次的な利点があります。つまり、正規表現はキーを押すたびに自動的にテストされるため、ボタンをクリックして正規表現をテストする必要はありません。

個人的には、複数のファイルのテキストを置き換える場合は、UltraEditを使用します。そうすれば、置換するファイルをバッチとして選択して、[置換]をクリックするだけです。しかし、単一のテキストファイルで作業していて、より複雑な正規表現を作成する必要がある場合は、それをRegex Heroに貼り付けて、そこで作業します。それは、すべてがリアルタイムで行われているのを見ると、Regex Heroが時間を節約できるためです。

0
Steve Wortham