Notepad++ 搜索路径引用并替换为文件路径?

Notepad++ search for path reference and replace with the file's path?

我正在使用 notepad++,我有许多 xml 个文件。 例如,假设 XML 文件是 SomeXML.XML.

在该文件中,将包含以下条目: //SERVER-NAME/Graphics/Materials/Downloaded/FabricGrey.jpg

我希望找到这些条目(它们都以 \SERVER-NAME 开头并以 jpg 或 png 结尾)并将它们替换为:

//Some的路径XML.XML/Fabric Grey.jpg

它一定是可行的 - 但我想不出来! H-E-L-P.

-- 第 1 部分:通用替换 --

你可以试试下面的正则表达式:

//.*/([^/]+\.(jpg|png))

分解:

  • 2 个正斜杠
  • 后跟一个或多个字符(. 匹配任何内容,+ 表示 1 个或多个)
  • 后跟一个斜线
  • 后跟不是斜线的任何内容:扩展名前的文件名([^\] 表示斜线以外的任何内容,+ 再次表示一个或多个)。
  • 后跟一个点(\. 将点转义,因此按字面解释)
  • 后接 jpg 或 png(| 表示或)

那就换成你喜欢的吧。如果您在替换中使用 $1,它将被替换为文件名。因此,在您的示例中,SomeXML.XML/ 将替换为 SomeXML.XML/Fabric Grey.jpg

-- 第二部分:用当前文件名替换SomeXML.XML --

不幸的是,不能在同一个替换操作中输入文件名。它必须分别为每个文件完成,但宏可以帮助加快速度。请注意,以下步骤包括录制所述宏,因此必须完全按照描述执行它们。

  1. 在notepad++中打开文件(先执行上述替换)。
  2. 单击宏 -> 开始录制。
  3. 按ctrl+f打开查找window.
  4. 转到替换选项卡。
  5. 在查找框中,但是 SomeXML.XML
  6. 清空替换框。
  7. 单击编辑 -> 复制到剪贴板 -> 当前文件名到剪贴板。
  8. 在替换为框中按 ctrl+v 粘贴文件名。
  9. 单击“全部替换”(不在所有打开的文档中)。
  10. 关闭替换-window.
  11. 单击宏 -> 停止录制。
  12. 现在在每个要替换的文件中,按 Ctrl+Shift+P 执行录制的宏。

不是完全自动化,但这应该已经让您的生活变得轻松多了。

这是一个 python 脚本版本:

import os.path
def replace_func(m):
try:
    head, tail = os.path.split(m.group(0))
    tail = "\" + tail
    newname = os.path.dirname(notepad.getCurrentFilename()) + tail
    newname = newname.replace("\","/")
    return newname
except:
    return m.group(0)

editor.rereplace('//.*/([^/]+\.(jpg|png))', replace_func)