如何删除除我想要的键/值之外的json文档的所有数据

时间:2016-04-25 11:27:30

标签: json regex notepad++

所以我有一个相当大的文档,其中包含以下条目:

"kff126d":"Infinity"

其他人喜欢:

"kff126d":"0.03702955"

还有几十个其他键,比如kff126e等,我想删除所有不是我要保留的一个键的东西,以及第二组引号内的任何值,所以我可以看看异常值。

有人可以帮帮我吗?我试过看起来很好,但与之前我用正则表达式完成的一些事情相比,它相当复杂。提前谢谢。

3 个答案:

答案 0 :(得分:2)

我可以建议以下正则表达式:

("kff126d":"[^"]*")|(?:(?!"kff126d":).)+

.匹配换行符选项为ON,并替换为$1\n

请参阅regex demo

这将插入多余的空行,您可以使用修改>删除这些空行。 线路运营> 删除空行

重点是和捕获(...)匹配您需要保留的部分,并删除所有其余部分。 所有其余可以与淬火贪婪令牌 (?:(?!"kff126d":).)+匹配(匹配任何不启动{{1}的字符(.)序列)。

enter image description here
V
enter image description here

以下是更新样本数据的替换结果屏幕:

enter image description here

答案 1 :(得分:1)

ctrl + h 并在查找部分中使用:(?m)^(?!"kff126d":).*?$并将替换部分留空。选择搜索模式'正则表达式'并选择全部替换

这将改变

"kff126d":"0.12345"
sdfgsdfg
sgsfgsfg
"kff126d":"0.03702955"
"kff126d":"0.03702955"
rererer
"kff126d":"0.03702955"
sfdgsfgfsg
sdfgsfg
"kff126e":"0.8888888888888"

"kff126d":"0.12345"


"kff126d":"0.03702955"
"kff126d":"0.03702955"

"kff126d":"0.03702955"

之后,如果您要删除所有空行,可以将\R+替换为\n

答案 2 :(得分:1)

描述

使用Notepad ++:

  • 找到所有不是所需键名的字符
  • 也不是值Infinity
  • 使用没有整齐填充的json字符串,也就是压缩的json
  • 留下一列垂直值

正则表达式

查找内容:

.*?(?:"kff126e":"((?!Infinity)[^"]*)"|\Z)

替换为:

$1\n

如何

来自Notepad ++

  1. ctrl h 进入查找和替换 模式

  2. 选择正则表达式选项

  3. 选择“。匹配换行符”选项

  4. 在“查找内容”字段中放置以下正则表达式 .*?(?:"kff126e":"((?!Infinity)[^"]*)"|\Z)

  5. 在替换为字段中输入$1\n点击全部替换

  6. 转到酒吧,品尝最喜欢的饮料。

  7. 解释

    Regular expression visualization

    NODE                     EXPLANATION
    ----------------------------------------------------------------------
      .*?                      any character (0 or more times (matching
                               the least amount possible))
    ----------------------------------------------------------------------
      (?:                      group, but do not capture:
    ----------------------------------------------------------------------
        "kff126e":"              '"kff126e":"'
    ----------------------------------------------------------------------
        (                        group and capture to \1:
    ----------------------------------------------------------------------
          (?!                      look ahead to see if there is not:
    ----------------------------------------------------------------------
            Infinity                 'Infinity'
    ----------------------------------------------------------------------
          )                        end of look-ahead
    ----------------------------------------------------------------------
          [^"]*                    any character except: '"' (0 or more
                                   times (matching the most amount
                                   possible))
    ----------------------------------------------------------------------
        )                        end of \1
    ----------------------------------------------------------------------
        "                        '"'
    ----------------------------------------------------------------------
       |                        OR
    ----------------------------------------------------------------------
        \Z                       before an optional \n, and the end of
                                 the string
    ----------------------------------------------------------------------
      )                        end of grouping
    

    发生了什么

    所需的值将被放入捕获组1 aka $1,它将替换匹配的文本。 \n插入一个返回字符。正则表达式引擎将在最后一次替换操作后继续解析您的文本,直到它到达文件末尾。