【问题标题】:Regex to replace what's inside the bracket except the another brackets inside of it正则表达式替换括号内的内容,除了其中的另一个括号
【发布时间】:2016-09-07 15:53:52
【问题描述】:

如何替换括号内的内容,除了其中的另一个括号。替换为ZZZZZ

{
 "0000" "1111"
 1111
 { 222 }
 { 333 }
}

将是:

{
 ZZZZZ
 { 222 }
 { 333 }
}

【问题讨论】:

  • 您要替换的文本是否总是跟在左括号后面?如果您提供更多示例,我们将能够看到数据的实际结构。如果您要搜索的文本可能位于其他括号中的任何位置,并且括号可以任意嵌套,则这种正则表达式会更加困难。

标签: regex notepad++ pcre


【解决方案1】:
({\n\s*)(?:[^}{]*)(\n\s*{)

首先,在捕获组中,(),匹配 {,然后是换行符 \n,然后是任意数量的空间。

({\n\s*)

接下来,在一个非捕获组中,匹配任何}{,任意次数。

(?:[^}{]*)

最后,以与我们开始的方式类似的方式结束:捕获换行符、任意数量的空格和下一个开头{

(\n\s*{)

这不会匹配没有内部括号的,如果内部括号嵌套到 3 层,它也不会工作。如果您提供一些输入示例,我们可以改进匹配(例如使用向后查找来跳过内部匹配)

查看demo at regex101.com

【讨论】:

  • 感谢您的回答,它有效!但是如果有换行符呢?我尝试了换行,但它不起作用。此外,我尝试在 1 行中为 2 个字符串加上 4 个引号,但它失败了。我需要你的帮助。
  • @MomarMaute 你能用这种格式的例子更新你的问题吗?
  • 抱歉回复晚了。我已经更新了帖子/问题。非常感谢@TemporalWolf
  • @MomarMaute 从否定集中删除 \s 已经涵盖了该附加测试。我已经更新了帖子和 regex101 演示。编辑:必须修复错误。
  • 非常感谢@TemporalWolf。抱歉,我无法投票,但您的回答确实有效。我希望外面的一些人正在寻找这个,和我的问题一样。
【解决方案2】:

这应该可以解决问题(?<=\{)(.*?)(?=\{)

这将匹配{{ 之间的所有内容。
此正则表达式中不包含换行符。为使其与 notepad++ 正常工作,需要选中查找/替换窗口中的“匹配换行符”复选框。

【讨论】:

  • @TemporalWolf Not in notepad++ 它没有 - 选中“匹配换行符”复选框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多