我对正则表达式相当熟悉,但我遇到了一个似乎无法理解的问题。
在文档中,我想替换两个标签之间的所有文本,但不替换标签之外的文本。
我想要替换的标签是 ][,并且仅当它们在 { } 内时才替换。 ][ 的数量未知。可以是 1、2 甚至 7。
以下是一个例子:
This is a tilte ][
And here some data {[tag1][tag2][tag3][tag4]}
This is another tilte ][
And here some data {[tag1][tag2][tag3][tag4]}
假设我想用正则表达式将 ][ 替换为 , ,当它位于 { 和 } 之间时。我该怎么做?
显然是这样的:
{.+?\]\[.+?}
但这只能替代第一次。我不想运行 20 次,希望次数不超过 20 次。
我正在使用 Notepad++
答案1
- Ctrl+H
- 找什么:
(?:^.*?\{|\G(?!^)).*?\K]\[
- 用。。。来代替:
,
- 查看 环绕
- 查看 正则表达式
- 取消选中
. matches newline
- Replace all
解释:
(?: # non capture group
^ # beginning of line
.*? # 0 or more any character but newline, not greedy
\{ # opening curly brace
| # OR
\G # restart from previous match position
(?!^) # negative lookahead, not at the beginning of line
) # end group
.*? # 0 or more any character but newline, not greedy
\K # forget all we have seen until this position
]\[ # closing and opening square bracket
截图(之前):
截图(之后):