正则表达式,选择中多次出现

正则表达式,选择中多次出现

我对正则表达式相当熟悉,但我遇到了一个似乎无法理解的问题。

在文档中,我想替换两个标签之间的所有文本,但不替换标签之外的文本。

我想要替换的标签是 ][,并且仅当它们在 { } 内时才替换。 ][ 的数量未知。可以是 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

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容