我只想找到并删除第二行和第三行中的感叹号,但保留第一行中的感叹号。
[some text !] [some text ! some text !
我试过了
(?<!\[.*)(!)(?!.*\])
但是,look behind不能消耗任何字符。
rqcrx0a61#
在Notepad++中,替换:
( # Capturing group consisting of ^\[ # a square bracket at the beginning of line, [^[\]]* # 0+ non-bracket characters, then \]$ # a closing bracket at the end of line, ) # | # or ! # a literal '!'
其中:
\1
这匹配所有带方括号的字符串和感叹号,但由于我们捕获的是前者并将其添加回去,因此只会删除感叹号。试试看on regex101.com。如果不能保证括号位于行的开头/结尾,只需删除^和$:(\[[^[\]]*\])|!。请注意,这可能匹配方括号中的多行字符串:
^
$
(\[[^[\]]*\])|!
[some tex!t !] [som!e text ! !some text ! ] ! foobar
...变成:
[some tex!t !] [som!e text ! !some text ! ] foobar
试试on regex101.com。要将匹配限制在一行上,请向字符类添加\n:(\[[^[\]\n]*\])|!。试试on regex101.com。或者,使用(*SKIP)(*FAIL)放弃第一部分,如bobble bubble所示:\[[^[\]\n]\](*SKIP)(*FAIL)|!。试试on regex101.com。
\n
(\[[^[\]\n]*\])|!
(*SKIP)(*FAIL)
\[[^[\]\n]\](*SKIP)(*FAIL)|!
1条答案
按热度按时间rqcrx0a61#
在Notepad++中,替换:
其中:
这匹配所有带方括号的字符串和感叹号,但由于我们捕获的是前者并将其添加回去,因此只会删除感叹号。
试试看on regex101.com。
如果不能保证括号位于行的开头/结尾,只需删除
^
和$
:(\[[^[\]]*\])|!
。请注意,这可能匹配方括号中的多行字符串:...变成:
试试on regex101.com。
要将匹配限制在一行上,请向字符类添加
\n
:(\[[^[\]\n]*\])|!
。试试on regex101.com。
或者,使用
(*SKIP)(*FAIL)
放弃第一部分,如bobble bubble所示:\[[^[\]\n]\](*SKIP)(*FAIL)|!
。试试on regex101.com。