如果如您的问题所示,您想使用 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 的新 regex 模块(我希望替换 re),我尝试并编译了它以与 N++ PythonScript 插件一起使用,并决定在您的示例集上对其进行测试。
控制台上的两个命令最终在编辑器中得到了正确的结果。
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部分。