在Notepad ++中,如何替换大文件中括在.
中的某个字符([]
)?
我在Notepad ++中有一个非常长的代码转储文件(PeopleCode)。在代码的每个部分的顶部,有一个这样的标记:
[G3FORM.FormFactory.OnExecute]
这表示一个类包和一个类。另外,这可以是多层深度:
[Y_REST.RESTQueries.ExampleClass.OnExecute]
每当在代码中声明一个类时,它就不会使用.
。它使用:
的。例如。:
import G3FORM:Form;
因此,当我想在代码转储中搜索该类时,我必须将所有.
更改为:
。我能做到这一点,但有点烦人。
我想帮助一下Notepad ++的正则表达式搜索功能进行查找和替换。我需要用.
替换这些头文件中包含的所有:
。例如。:
[Y_REST.RESTQueries.ExampleClass.OnExecute]
会成为
[Y_REST:RESTQueries:ExampleClass.OnExecute]
除了最后一个结肠之外的所有结肠都被替换(即便如此,如果这使它过于复杂,最后的.
也可以被替换)。
我一直在玩一些正则表达式尝试得到这个,但我对它不够熟悉。
这根本不起作用:
(([A-Z])\.)+
这也找不到任何东西:
\[(([A-Z])\.)+\]
我可能远离基地了。我没有足够熟悉正则表达式,知道如何使用查找和替换正则表达式。
像这样执行正则表达式查找/替换:
(\[[^\].]+)\.([^\]]+\])
\1:\2
由于级别数量有限,一种非常直接的方法是使用多个搜索,每个级别一个搜索。
这是四个级别的搜索/替换:
Find what : \[([^.]+)\.([^.]+)\.([^.]+)\.([^\]]+)\]
Replace with: \[$1:$2:$3:$4\]
搜索表达式由方括号中的([^.]+)\.
“not dots after a dot”组成。
$1
..$4
表示捕获组,即与括号中的表达式匹配的组。
要执行更少或更多级别的替换,请在搜索框中添加删除或添加\.([^\.]+)
,然后相应地调整替换框。
试试这个(?:(?!\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
替换你想要的任何东西。
注 - 出于性能原因,我们通过检查关闭来限制延迟
每个开放式支架\[ (?= [^\[\]]+ \] )
只支架一次