【问题标题】:Trying to delete a line like below with notepad++尝试使用记事本++删除如下行
【发布时间】:2016-07-20 05:03:23
【问题描述】:

我有一个巨大的 .json 文件,其中包含一百万行,我想从我的文件中删除如下一行。我该怎么做呢?我曾尝试使用以下内容,但仅在采用以下格式时删除小时:“小时”:{} 我应该如何修改我的正则表达式以删除此行上的所有内容?谢谢!

我的正则表达式:"hours": \{.*?\}

我想在 JSON 中删除的代码块:

"hours": {"Monday": {"close": "19:00", "open": "10:00"}, "Tuesday": {"close": "19:00", "open": "10:00"}, "Friday": {"close": "19:00", "open": "10:00"}, "Wednesday": {"close": "19:00", "open": "10:00"}, "Thursday": {"close": "19:00", "open": "10:00"}, "Sunday": {"close": "18:00", "open": "11:00"}, "Saturday": {"close": "19:00", "open": "10:00"}}

谢谢!

【问题讨论】:

  • 您最大的问题是嵌套的括号,这会更容易以编程方式删除...例如使用 js,例如:delete jsonObj.hours
  • 您能否详细说明您要删除的行的共同点?例如。我们可以删除所有以"hours": 开头的行吗?
  • @LarsFischer 是的,我想删除所有以“小时”开头的行:
  • @smerny 我想使用正则表达式删除 notepad++ 中的行 :)
  • 小时数总是单独一行吗?

标签: json regex replace find notepad++


【解决方案1】:

您可以在模式内使用子例程调用来递归{...} 子模式:

"hours":\s*(\{(?>[^{}]++|(?1))*\})

regex demo

模式说明:

  • "hours": - 文字序列 `"hours":
  • \s* - 零个或多个空格
  • (\{(?>[^{}]++|(?1))*\}) - 将使用 (?1) 子例程调用递归的组 1(因此,将确保递归)。这将匹配{,然后是除{} 或整个Group 1 子表达式(带有(?1))之外的1 个或多个字符,然后是结束}

【讨论】:

    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2014-03-03
    • 2011-04-26
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多