在notepad ++中使用RegEx替换

Sce*_*ule 1 regex xml notepad++

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

Search: (<name>)(.*)(</name>)
Replace: \1xyz\3
Run Code Online (Sandbox Code Playgroud)

Mar*_*der 12

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

然而,无论如何,你做错了就是使用贪婪的重复.这将从第一个<name>到最后一个一直进行</name>(即使它们不属于一起),因为.*将尽可能多地消耗,同时仍然满足匹配条件.使用此代替:

Search: (<name>).*?(</name>)
Replace: \1xyz\2
Run Code Online (Sandbox Code Playgroud)

或者是在安全方面也能逃脱<>,因为他们是在某些特定情况下(而不是在这一个虽然)元字符:

Search: (\<name\>).*?(\</name\>)
Replace: \1xyz\2
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 你可能还想勾选"匹配新行"框. (3认同)