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

问题描述 投票:0回答:3

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

Explanation

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

[G3FORM.FormFactory.OnExecute]

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

[Y_REST.RESTQueries.ExampleClass.OnExecute]

每当在代码中声明一个类时,它就不会使用.。它使用:的。例如。:

import G3FORM:Form;

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

Example

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

[Y_REST.RESTQueries.ExampleClass.OnExecute]

会成为

[Y_REST:RESTQueries:ExampleClass.OnExecute]

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

Failed Attempts

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

这根本不起作用:

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

这也找不到任何东西:

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

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

regex replace notepad++
3个回答
0
投票

像这样执行正则表达式查找/替换:

  • 打开替换对话框
  • 找到什么:(\[[^\].]+)\.([^\]]+\])
  • 替换为:\1:\2
  • 检查正则表达式
  • 单击替换或全部替换
  • 按住Alt-A(全部替换),直到查找对话框状态栏中的消息告诉您“0已发生更换”

0
投票

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

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

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

搜索表达式由方括号中的([^.]+)\.“not dots after a dot”组成。

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

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


0
投票

试试这个(?:(?!\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

替换你想要的任何东西。 注 - 出于性能原因,我们通过检查关闭来限制延迟 每个开放式支架\[ (?= [^\[\]]+ \] )只支架一次

© www.soinside.com 2019 - 2024. All rights reserved.