如何替换Notepad ++中两个括号内的字符?

时间:2016-07-21 20:10:42

标签: regex replace notepad++

在Notepad ++中,如何替换大文件中括在.括号内的某个字符([])?

解释

我在Notepad ++中有一个非常长的代码转储文件(PeopleCode)。在代码的每个部分的顶部,有一个这样的标记:

[G3FORM.FormFactory.OnExecute]

这表示一个类包和一个类。此外,这可以是多层深度:

[Y_REST.RESTQueries.ExampleClass.OnExecute]

每当在代码中声明一个类时,它都不会使用.' s。它使用:' s。 E.g:

import G3FORM:Form;

因此,当我想在代码转储中搜索该类时,我必须将所有.更改为:。我可以做到这一点,但它有点烦人。

实施例

我想帮助一下Notepad ++的正则表达式搜索功能进行查找和替换。我需要用.替换这些标头中包含的所有:。 E.g:

[Y_REST.RESTQueries.ExampleClass.OnExecute]

会变成

[Y_REST:RESTQueries:ExampleClass.OnExecute]

除了最后一个冒号之外的所有冒号都被替换(即便如此,如果这使得它过于复杂,也可以替换最后一个.。)

尝试失败

我一直在玩一些正则表达式尝试得到这个,但我对它不够熟悉。

这根本不起作用:

(([A-Z])\.)+

这也找不到任何东西:

\[(([A-Z])\.)+\]

我可能远离基地。我还没有足够熟悉正则表达式,知道如何使用查找和替换正则表达式。

3 个答案:

答案 0 :(得分:0)

正则表达式查找/替换如下:

  • 打开替换对话框
  • 查找内容: (\[[^\].]+)\.([^\]]+\])
  • 替换为: \1:\2
  • 检查正则表达式
  • 点击替换或全部替换
  • 按住Alt-A(全部替换),直到查找对话框状态栏中的消息告诉您" 0次出现被替换"

答案 1 :(得分:0)

试试这个toCharArray

解释

(?:(?!\A)\G|\[(?=[^\[\]]+\]))[^\[\].]*\K\.

替换为您想要的任何内容 注意 - 出于性能原因,我们通过检查结束来限制延迟 每个开括号 (?: # Cluster start (?! \A ) # Not beginning of string \G # G anchor - If matched before, start at end of last match | # or \[ # Open bracket (?= [^\[\]]+ \] ) # Only if there is a closing bracked down stream ) # Cluster end [^\[\].]* # Not brackets nor dot \K # Exclude previous in match \. # The dot, all thats left

仅支架一次

答案 2 :(得分:0)

由于级别数量有限,一种非常直接的方法是使用多个搜索,每个级别一个搜索。

以下是四个级别的搜索/替换:

Find what :   \[([^.]+)\.([^.]+)\.([^.]+)\.([^\]]+)\]
Replace with: \[$1:$2:$3:$4\]

搜索表达式由([^.]+)\.“而不是点后跟一个点”括在方括号中的组组成。

$1 .. $4表示捕获群组,即与括号中的表达式匹配的内容。

要执行更少或更多级别的替换,请在搜索框中添加删除或添加\.([^\.]+),然后相应地调整替换框。