如何使用 Notepad++ 查找和替换 <wp:postmeta> </wp:postmeta> 标签之间的文本

Posted

技术标签:

【中文标题】如何使用 Notepad++ 查找和替换 <wp:postmeta> </wp:postmeta> 标签之间的文本【英文标题】:How to fin and replace text between <wp:postmeta> </wp:postmeta> tags using Notepad++ 【发布时间】:2016-03-31 06:37:31 【问题描述】:

我正在使用 XML 导出来删除旧的所需数据并将其替换为相关标签。我一直在环顾四周,但无法准确找到我正在寻找的东西,如果这看起来多余,请原谅我。

我希望替换我的 &lt;wp:postmeta&gt;&lt;/wp:postmeta&gt; 标记中的所有数据。但是,由于它们跨越多条线路,.*? 无法像过去那样工作。我相信这意味着它只跨越一条线。以下是代码示例:

<item>
    //Start of find

    <wp:postmeta>
        <wp:meta_key><![CDATA[_edit_last]]></wp:meta_key>
        <wp:meta_value><![CDATA[3]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
        <wp:meta_value><![CDATA[51833]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[snapEdIT]]></wp:meta_key>
        <wp:meta_value><![CDATA[1]]></wp:meta_value>
    </wp:postmeta>

    // End of find using Notepad++
</item>
<item>
    //Start of find

    <wp:postmeta>
        <wp:meta_key><![CDATA[_edit_last]]></wp:meta_key>
        <wp:meta_value><![CDATA[3]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
        <wp:meta_value><![CDATA[51425]]></wp:meta_value>
    </wp:postmeta>

    // End of find using Notepad++
</item>

我特别希望在其相应的打开和关闭item 标记中查找并替换从第一个&lt;wp:postmeta&gt; 标记到最后一个关闭&lt;/wp:postmeta&gt; 末尾的所有内容。有数百个,我不想一个一个去。请让我知道这是否可能。如果不可能,我想知道如何从一个 &lt;wp:postmeta&gt; 转到它的关闭 &lt;/wp:postmeta&gt;,我可以使用它。

提前致谢。

【问题讨论】:

找不到一种方法来做你想做的事,但&lt;wp:postmeta&gt;(.*?)&lt;/wp:postmeta&gt; 对每个标签都有效!不要忘记检查选项“。匹配换行符” 不需要分组括号。我喜欢用它。 【参考方案1】:

在 Notepad++ 中,要强制 . 匹配换行符(多行文本块),您需要在查找和替换对话框中启用 . matches newline 选项。

请注意,使用正则表达式更改 (X)html 代码非常困难且容易出错。

所以,如果您知道自己在做什么,您可以启用我上面提到的那个选项并使用正则表达式 &lt;wp:postmeta&gt;.*?&lt;/wp:postmeta&gt; 并替换为您需要的任何内容。见regex demo。

如果有大文本块没有关闭&lt;/wp:postmeta&gt;,您可能会遇到超时问题。然后,您需要展开正则表达式:

<wp:postmeta>[^<]*(?:<(?!/wp:postmeta>)[^<]*)*</wp:postmeta>

查看正则表达式演示。无论. matches newline 选项如何,此正则表达式都将匹配换行符。

如果需要匹配相邻的 wp:postmeta 标签,可以在模式周围使用非捕获组,并为其设置 + 量词:

(?:\s*<wp:postmeta>[^<]*(?:<(?!/wp:postmeta>)[^<]*)*</wp:postmeta>)+

见one more demo

截图:

【讨论】:

感谢您的回复,但我没有像以前看到的那样看到匹配的新行。这是一个在查找中直接复制粘贴的屏幕截图。它仍然显示它无法找到任何东西。 i.imgur.com/FXeQ1Ne.jpg 请看我的截图。使用展开的模式,您不需要任何 . 匹配换行符 选项。您可能还想更新您的 Notepad++ 版本。 太棒了,谢谢.. 我卸载了我拥有的版本并安装了最新版本,现在它运行良好。干杯!!

以上是关于如何使用 Notepad++ 查找和替换 <wp:postmeta> </wp:postmeta> 标签之间的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Notepad++ 正则表达式查找/替换中保留括号

请问notepad++如何将换行替换成其它符号?

notepad 如何将【001】替换成 第001章 ?

Notepad++中查找替换“换行符”

Notepad ++中“查找/替换”对话框中“全部替换”按钮的键盘快捷键?

如何在记事本++中的书签行中查找和替换