質問が示すように、N ++を使用したい場合は、N++Pythonスクリプトを使用してください。スクリプトを設定し、ショートカットキーを割り当てると、開いて変更し、保存するだけでよいシングルパスソリューションが得られます...それよりもはるかに簡単になることはできません。
問題の一部は、N ++が正規表現ツールではなく、専用の正規表現ツールの使用、または検索/置換ソリューションでさえも保証される場合があることだと思います。テキスト処理と編集用に作成されたツールを使用すると、速度と時間の両方の点で優れている場合があります。
[スクリプト編集]::変更されたイン/アウトの期待に一致するように変更されました。
# Substitute & Replace within matched group.
from Npp import *
import re
def repl(m):
return "(Scripts." + re.sub( "[-.]", "_", m.group(1) ).replace( "/", "." ) + ")"
editor.pyreplace( '(?:[(].*?Scripts.)(.*?)(?:"?[)])', repl )
- インストール::プラグイン->プラグインマネージャー->Pythonスクリプト
- 新しいスクリプト::プラグイン->Pythonスクリプト->script-name.py
- ターゲットタブを選択します。
- 実行::プラグイン->Pythonスクリプト->スクリプト->スクリプト名
[編集:拡張ワンライナーPythonScriptコマンド]
Python用の新しい正規表現モジュールが必要になったので(reの代わりになることを願っています)、N ++ PythonScriptプラグインで使用するために試してコンパイルし、サンプルセットでテストすることにしました。
コンソールの2つのコマンドは、エディターで正しい結果になりました。
import regex as re
editor.setText( (re.compile( r'(?<=.*Content[(].*)((?<omit>["~]+?([~])[/]|["])|(?<toUnderscore>[-.]+)|(?<toDot>[/]+))+(?=.*[)]".*)' ) ).sub(lambda m: {'omit':'','toDot':'.','toUnderscore':'_'}[[ key for key, value in m.groupdict().items() if value != None ][0]], editor.getText() ) )
とても甘い!
regex
代わりに使用することで他に本当にクールre
なのは、Expressoで式を作成し、それをそのまま使用できることです。r''
これにより、文字列部分をExpressoにコピーアンドペーストするだけで、詳細な説明が可能になります。
その省略テキストは次のとおりです。
Match a prefix but exclude it from the capture. [.*Content[(].*]
[1]: A numbered capture group. [(?<omit>["~]+?([~])[/]|["])|(?<toUnderscore>[-.]+)|(?<toDot>[/]+)], one or more repetitions
Select from 3 alternatives
[omit]: A named capture group. [["~]+?([~])[/]|["]]
Select from 2 alternatives
["~]+?([~])[/]
Any character in this class: ["]
[toUnderscore]: A named capture group. [[-.]+]
[toDot]: A named capture group. [[/]+]
Match a suffix but exclude it from the capture. [.*[)]".*]
コマンドの内訳はかなり気の利いたものです。空ではないグループの名前の「スイッチ」を基本的に使用して、コンパイルされた正規表現置換コマンドの結果に完全なバッファーの内容を設定するようにScintillaに指示しています。
うまくいけば、Dave(PythonScript作成者)がプロジェクトのExtraPythonLibs部分に正規表現モジュールを追加します。