如果一行包含X,如何用Y替换下一行?

问题描述 投票:0回答:1

我正在尝试在 JSON 文件中获取包含大量文本的文件,并使用“查找和替换”对其进行批量编辑,而不是逐行浏览并复制+粘贴我想要进行的更改.

例如,如果我有一个水果列表,并且我想简化它分组的树类型,那么我会采用以下方法:

  "Fruit And Veg\\Fruits\\Apples - fuji apple": {
    "group": "Fuji apple tree"
  },
  "Fruit And Veg\\Fruits\\Apples - granny smith": {
    "group": "GrannySmith tree"
  },
  "Fruit And Veg\\Fruits\\Pears - nashi": {
    "group": "Nashi tree"
  },
  "Fruit And Veg\\Fruits\\Pears - concorde": {
    "group": "concorde pear tree"
  },

并使用查找和替换工具将其更改为:

  "Fruit And Veg\\Fruits\\Apples - fuji apple": {
    "group": "Apple Tree"
  },
  "Fruit And Veg\\Fruits\\Apples - granny smith": {
    "group": "Apple Tree"
  },
  "Fruit And Veg\\Fruits\\Pears - nashi": {
    "group": "Pear Tree"
  },
  "Fruit And Veg\\Fruits\\Pears - concorde": {
    "group": "Pear Tree"
  },

我想让它在第 1 行中搜索文本字符串(在本例中为

Apples
Pears
),然后替换第 2 行的内容(因此该行与 Apple Tree 或 Pear Tree 组匹配,如适用),并且对于文件中的每个条目,不对第 3 行进行任何更改。 我知道我需要分别运行苹果和梨的查找和替换,这没问题,但我不知道如何进行这项工作。

目前,我认为该文件包含我用于仅以复数形式搜索的文本 - 但如果事实并非如此,有没有办法让我指定要查找的“查找和替换”的“查找”部分查找“

\\Apple
”(包括前面的字符)而不是搜索“
Apple
”或“
Apples
”?

我尝试在这里查看其他问题,看看是否能找到相同的问题,但运气不佳 - 虽然我一直在尝试弄清楚如何使用 ^.* $1 等,从 Stack Overflow 上这些页面上给出的示例来看,我真的不知道我在做什么。即使使用“搜索模式 - 正则表达式”,并打开“.匹配换行符',到目前为止我尝试过的大多数操作都导致“查找:找不到文本”或“查找:无效的正则表达式”。

json notepad++
1个回答
0
投票
  • Ctrl+H
  • 查找内容:
    Fruit And Veg.+?(?:(Apples)|(Pears)).+\R.+?"group": \K".+tree"
  • 替换为:
    (?1"Apple Tree")(?2"Pear Tree")
  • 勾选 火柴盒
  • 勾选环绕
  • 搜索模式 正则表达式
  • 取消勾选
    . matches newline
  • 全部替换

说明:

Fruit And Veg   # literally
.+?             # 1 or more any character, not greedy
(?:             # non capture group
    (Apples)        # group 1, Apples
  |               # OR
    (Pears)         # group 2, Pears
)               # end group
.+              # 1 or more any character
\R              # any kind of linebreak
.+?             # 1 or more any character, not greedy
"group":        # literally
\K              # forget all we have seen until this position
".+tree"        # 1 or more character and tree

更换:

(?1"Apple Tree")    # if group 1 exists, pur Apple Tree
(?2"Pear Tree")     # if group 2 exists, put Pear Tree

截图(之前):

enter image description here

截图(之后):

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.