我有一个包含数千个代码行的文件,我需要先找到一个文件名(<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>
基本上,我需要弄清楚如何在<path>./
和.rom</path>
之间获取文本,并在<name>
和</name>
之间用它替换下一行,看起来像这样,因为它向下移动文件。
<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>
在Notepad ++中,这可以通过简单的正则表达式完成。搜索:
^(\h*<path>\./)([^<>\r\n]+)(\.rom</path>\h*[\r\n]+\h*<name>)[^<>\r\n]*(</name>)
并替换它
\1\2\3\2\4
说明:
^(\h*<path>\./)
获取开始路径文本并将其保存在捕获组\1
中。
([^<>\r\n]+)
从路径行获取所需的文件名文本,将其保存到\2
。
(\.rom</path>
获取路径行的其余部分。
\h*[\r\n]+\h*<name>)
获取换行符和空格以及名称行的开头。此文本和路径行的其余部分保存到\3
。
[^<>\r\n]*
获取名称行中不需要的部分,但不保存它。
(</name>)
获取名称行的最后部分并将其保存到\4
。
重组。 \1\2\3
生成路径行和名称行的开头。下一个\2
将不需要的名称行文本替换为文件名的所需部分。最终的\4
完成了新的名称行。
当然,必须在Notepad ++的替换窗口中选择“正则表达式”。