英文:
Notepad++ v8.5.4 Replace not working for these strings
问题
我正在处理这样的行
[6268:1434][2023-07-17T03:44:08]i001: Burn v3.14.0.4118,Windows v10.0(Build 22631:Service Pack 0),路径:C:\Users\david\AppData\Local\Temp{95942D14-E274-486C-A7FB-EDAF9E773422}.cr\winsdksetup.exe
[6268:1434][2023-07-17T03:44:08]i009: 命令行:'-burn.clean.room=E:\Downloads\winsdksetup.exe -burn.filehandle.attached=728 -burn.filehandle.self=740'
对于搜索,我使用
"(.)2023-07-17(.): "
双引号只是显示正在使用的字符串,并选择正则表达式。
这个方法有效。
如果我想要将其替换为两个空格字符。
应该是
Burn v3.14.0.4118, Windows v10.0(Build 22631:Service Pack 0),路径:C:\Users\david\AppData\Local\Temp{95942D14-E274-486C-A7FB-EDAF9E773422}.cr\winsdksetup.exe
获得
C:\Users\david\AppData\Local\Temp{95942D14-E274-486C-A7FB-EDAF9E773422}.cr\winsdksetup.exe
应该是
命令行:'-burn.clean.room=E:\Downloads\winsdksetup.exe -burn.filehandle.attached=728 -burn.filehandle.self=740'
获得
'-burn.clean.room=E:\Downloads\winsdksetup.exe -burn.filehandle.attached=728 -burn.filehandle.self=740'
为什么第一个": "没有被用作搜索定界符,而是最后一个?
英文:
I am working with lines like this
[6268:1434][2023-07-17T03:44:08]i001: Burn v3.14.0.4118, Windows v10.0 (Build 22631: Service Pack 0), path: C:\Users\david\AppData\Local\Temp\{95942D14-E274-486C-A7FB-EDAF9E773422}\.cr\winsdksetup.exe
[6268:1434][2023-07-17T03:44:08]i009: Command Line: '-burn.clean.room=E:\Downloads\winsdksetup.exe -burn.filehandle.attached=728 -burn.filehandle.self=740'
For search I use
"(.*)2023-07-17(.*): "
The Double Quotes just show the string being used and with Regular Expression selected.
That works.
If I then want to replace that with two blank characters.
Should be
Burn v3.14.0.4118, Windows v10.0 (Build 22631: Service Pack 0), path: C:\Users\david\AppData\Local\Temp\{95942D14-E274-486C-A7FB-EDAF9E773422}\.cr\winsdksetup.exe
getting
C:\Users\david\AppData\Local\Temp\{95942D14-E274-486C-A7FB-EDAF9E773422}\.cr\winsdksetup.exe
Should be
Command Line: '-burn.clean.room=E:\Downloads\winsdksetup.exe -burn.filehandle.attached=728 -burn.filehandle.self=740'
getting
'-burn.clean.room=E:\Downloads\winsdksetup.exe -burn.filehandle.attached=728 -burn.filehandle.self=740'
Why is the first ": " not being used as the search delimiter instead of the Last?
答案1
得分: 0
为什么第一个 ":" 没有被用作搜索分隔符,而是最后一个?
这是因为 .*
正则表达式匹配允许其余正则表达式匹配的最长序列。也就是说,默认情况下,.*
是“贪婪”的。您有两个选择:
-
切换到非贪婪匹配:
.*?
。请参阅 https://www.boost.org/doc/libs/1_80_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html。 -
将第二个
.*
改为匹配最大数量的非冒号字符:[^:]*
。
英文:
> Why is the first ": " not being used as the search delimiter instead
> of the Last?
That is because the .*
regex matches the longest sequence that allows the rest of the regex to match. That is, .*
is "greedy" by default. You have two options:
-
Switch to a non-greedy match:
.*?
. See https://www.boost.org/doc/libs/1_80_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html. -
Change the second
.*
to match the maximal number of non-colon characters:[^:]*
.
答案2
得分: 0
- <kbd>Ctrl</kbd>+<kbd>H</kbd>
- 查找内容:
^.+?2023-07-17.\d\d:\d\d:\d\d\][^:]+:
- 替换为:
LEAVE EMPTY
- 勾选 环绕
- 选择 正则表达式
- 取消勾选
. 匹配换行符
- <kbd>全部替换</kbd>
英文:
- <kbd>Ctrl</kbd>+<kbd>H</kbd>
- Find what:
^.+?2023-07-17.\d\d:\d\d:\d\d\][^:]+:
- Replace with:
LEAVE EMPTY
- TICK Wrap around
- SELECT Regular expression
- UNTICK
. matches newline
- <kbd>Replace all</kbd>
Explanation:
^ # beginning of line
.+? # 1 or more any character but newline, not greedy
2023-07-17 # literally
. # 1 any character
\d\d:\d\d:\d\d # 2 digits, colon, 2 digits, colon, 2 digit
\] # ] character
[^:]+ # 1 or more any character that is not a colon
: # colon and sapce
Screenshot (before):
Screenshot (after):
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论