【问题标题】:Regex to remove spaces from Key but not Value正则表达式从键中删除空格而不是值
【发布时间】:2020-10-19 16:38:37
【问题描述】:

我有以下 JSON 对象

{
    "Submitter":"Fred",
    "Create Date":"2019-11-05T11:31:58.000+0000",
    "Assigned To":"Some Person",
    "Last Modified By":"Fred@acme.com",
    "A String of Four": "A String with 4 words and 3 spaces",
    "Another Test": "Four Words Appear Here",
}

我想删除键中的所有空格(例如“创建日期”和“四个字符串”等)但是我不想删除值中的空格。

我尝试了以下方法,但这会提取除引号和冒号 (":) 之后的所有空格

(?!")\s(?!")(?!:)

我也试过

\s(?=\w*\":)

但这只会拾取以引号和冒号 (":) 结尾的单词之前的 最后一个空格,并且不会拾取 Key 中的其他空格。

我的下一次尝试和我认为最接近的一次是:

(?<=").*?(?=\w*":)|(?<!":)(?!.*?)(?=\w*)

我正在测试https://regex101.com/

【问题讨论】:

  • 为什么要使用regex 来完成这项任务?一个简单的str.remove(' ') 就可以了。
  • @ChihebNexus:可能 OP 希望正则表达式对整个 JSON 字符串进行操作。
  • @RobertHarvey 好点。
  • 试试\s(?=[^"]*":\s*") (demo)。
  • @WiktorStribiżew:非常好。将其发布为答案。您可以使用 Regex101 提供的解释来支持答案。

标签: json regex


【解决方案1】:

您可以尝试以下表达式作为快速修复,因为您需要修复的 JSON 是您显示的格式(它可能无法与其他 JSON 一起使用):

\s(?=[^"]*":\s*")

见regex demo

详情

  • \s - 一个空格
  • (?=[^"]*":\s*") - 一个积极的前瞻,紧靠当前位置的右侧,需要
    • [^"]* - 除了" 之外的零个或多个字符
    • ": - ": 字符串
    • \s* - 0+ 个空格
    • " - 双引号。

【讨论】:

  • 如何实现这个到 json 对象?我是这个 javacript 的新手,如果你能给我一个例子,我真的很感激。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2020-10-27
  • 2011-11-01
  • 2012-11-15
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 2021-04-10
相关资源
最近更新 更多