【问题标题】:Notepad++ search for path reference and replace with the file's path?Notepad++ 搜索路径引用并替换为文件的路径?
【发布时间】:2015-07-15 15:22:32
【问题描述】:

我正在使用记事本++,并且我有许多 xml 文件。 例如,假设 XML 文件是 SomeXML.XML。

在文件中,会有如下条目: //SERVER-NAME/Graphics/Materials/Downloaded/Fabric Grey.jpg

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

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

这一定是可行的——但我想不通! H-E-L-P。

【问题讨论】:

  • 阅读正则表达式。

标签: regex notepad++ nppexec


【解决方案1】:

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

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

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

分解:

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

然后用你喜欢的任何东西替换。如果您在替换中使用 $1,它将被替换为文件名。因此,在您的示例中,SomeXML.XML/$1 将替换为 SomeXML.XML/Fabric Grey.jpg

-- 第 2 部分:将 SomeXML.XML 替换为当前文件名--

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

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

不是完全自动化的,但这应该已经让你的生活更轻松了。

【讨论】:

  • 天哪 - 太棒了...... Find Regex 工作得非常好 - 但我不清楚我在替换方面需要什么。假设我正在编辑的文件(xml 文件)位于路径 \\SERVER\Dir1\ 中。我需要将 $1 附加到此,以便替换字符串为 \\SERVER\Dir1\filename.ext。所以我需要以某种方式获取我正在编辑的文件的路径……这可能吗?
  • 我想您知道当前要替换文本的文件的路径吗?还是您要同时对多个文件执行此操作?
  • 没关系,我只是再次阅读了原始问题。我认为没有办法在一个单一的动作中做到这一点,但你可以用一个宏来做到这一点。我会在一分钟内更新我的答案。
  • 我已经更新了我的答案。当然,您也可以将这两种解决方案组合成 1 个宏,您可以根据自己的喜好为每个文件执行该宏。我认为这应该为您提供足够的指导,以便能够做到这一点:)
【解决方案2】:

这是一个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)

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2017-08-09
    • 2017-12-17
    相关资源
    最近更新 更多