【问题标题】:Bulk 'find and replace' function for multiple lines in Notepad++ or Programmer's Notepad?Notepad ++或程序员记事本中多行的批量“查找和替换”功能?
【发布时间】:2017-12-07 11:20:26
【问题描述】:

我有一个包含数千行代码的文件,我需要首先找到一个文件名(<path>./THIS-TEXT.rom</path> 之间的文本),复制该文本,然后用该文本替换下一行(<name>this-one-replaced</name> 之间的文本) .然后继续前进,直到找到下一个序列。

我一直手动执行此操作,然后才意识到我可能需要 8 小时手动执行此操作才能完成我的项目。我认为必须有一些更简单的方法来做到这一点。下面是连续两个代码块的示例。请注意,这只是连续数千个中的两个。

<game id="494">
    <path>./The Legend of Zelda.rom</path>
    <name>legend of zelda, the (en,eu,it)</name>
    <genre>Miscellaneous</genre>
</game>
<game id="954">
    <path>./Final Fantasy.rom</path>
    <name>final fantasy (usa, europe)</name>
    <genre>Miscellaneous</genre>
</game>

基本上,我需要弄清楚如何在 &lt;path&gt;./.rom&lt;/path&gt;,并用它替换 &lt;name&gt;&lt;/name&gt; 之间的下一行,使其看起来像这样,因为它向下移动文件以供下一次出现。

<game id="494">
    <path>./The Legend of Zelda.rom</path>
    <name>The Legend of Zelda</name>
    <genre>Miscellaneous</genre>
</game>
<game id="954">
    <path>./Final Fantasy.rom</path>
    <name>Final Fantasy</name>
    <genre>Miscellaneous</genre>
</game>

【问题讨论】:

    标签: text replace find notepad++ bulk


    【解决方案1】:

    在 Notepad++ 中,这可以通过一个简单的正则表达式来完成。搜索:

    ^(\h*<path>\./)([^<>\r\n]+)(\.rom</path>\h*[\r\n]+\h*<name>)[^<>\r\n]*(</name>)
    

    替换成

    \1\2\3\2\4
    

    说明:

    ^(\h*&lt;path&gt;\./) 获取打开路径文本并将其保存在捕获组\1

    ([^&lt;&gt;\r\n]+) 从路径行获取想要的文件名文本,将其保存到\2

    (\.rom&lt;/path&gt; 获取路径行的剩余部分。

    \h*[\r\n]+\h*&lt;name&gt;) 获取换行符、空格和名称行的开头。此文本和路径行的其余部分保存到\3

    [^&lt;&gt;\r\n]* 获取名称行中不需要的部分并且不保存它。

    (&lt;/name&gt;) 获取名称行的最后一部分并将其保存到\4

    重新组装。 \1\2\3 构成路径行和名称行的开头。下一个\2 将不需要的名称行文本替换为文件名的所需部分。最后的 \4 完成了新的名称行。

    当然,“正则表达式”必须在Notepad++的替换窗口中选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-09
      • 2014-07-18
      • 2019-02-04
      • 2013-11-23
      • 2020-07-02
      • 2013-08-20
      • 2018-05-24
      相关资源
      最近更新 更多