1

我想用 xyz 替换标记的 XML 文件中的所有名称。换句话说,替换标签之间的所有内容(包括空格)。我究竟做错了什么?

Search: (<name>)(.*)(</name>)
Replace: \1xyz\3
4

1 回答 1

13

您正在尝试使用正则表达式解析 XML

但是,无论如何,您做错的是使用贪婪的重复。这将从第一个<name>到最后一个</name>(即使它们不属于一起)一直进行,因为.*它将尝试在满足匹配条件的同时尽可能多地消耗.. 改用这个:

Search: (<name>).*?(</name>)
Replace: \1xyz\2

或者为了安全起见,您也可以转义<and >,因为它们在某些特定情况下是元字符(虽然不是在这个情况下):

Search: (\<name\>).*?(\</name\>)
Replace: \1xyz\2

在这两种情况下,这都会导致.*不贪婪,即它会尽可能少地消耗。

并确保升级到 Notepad++ 6,因为在此之前 Notepad++ 的正则表达式引擎存在一些问题。

最后,正如 hoombar 在评论中指出的那样,.默认情况下匹配换行符之外的每个字符。在 Notepadd++ 中,您可以通过勾选复选框来更改此行为. matches newline

于 2012-11-02T12:29:45.110 回答