【问题标题】:Replace a specific string with conditions in Groovy用 Groovy 中的条件替换特定字符串
【发布时间】:2023-02-06 01:21:40
【问题描述】:

我们有这个字符串。我们需要用点 (.) 替换 \(反斜杠)和 \"(反斜杠后跟双引号),但如果 \"(反斜杠后跟双引号)后跟逗号 (,),就像 Id 值末尾的情况一样。我们正在尝试使用replaceAll,因为整个有效载荷相当大。

输入示例:

{
"Name":"138.5\" Ultra\violet"
"Id":"\\z\\\\\\\\",
}

输出应该是:

{
"Name":"138.5. Ultra.violet"
"Id":"..z......",
}

通过使用这段代码,它负责替换\"\,但它也替换了\",即使它后面跟着逗号(,)。我假设它可以用正则表达式来完成,但我不擅长正则表达式,所以感谢任何帮助。

    newcontent=newcontent.toString().replaceAll(/\\"/, '.')
    newcontent=newcontent.toString().replaceAll("\\\\", ".")

【问题讨论】:

  • 如果您要求使用groovy 语言的正则表达式,为什么要添加标记sap
  • 什么生成无效的 Json?
  • 当字段后面没有逗号时会发生什么,因为它是对象中的最后一项?
  • "Id":"Some\",thing" 会发生什么?对此我有种不好的预感...
  • @SandraRossi 我需要在 sap 平台上使用它,因此添加了它。

标签: regex groovy


【解决方案1】:

我会用special替换",,然后用点替换所有("),然后用",替换specials

String input = /{ "Name":"138.5" Ultraiolet" "Id":"\z\\\\", }/

String output = input.replaceAll( '\\",', '@@@' )
                     .replaceAll( '\\"?', '.' )
                     .replaceAll( '@@@', '\",' )

assert output == '{ "Name":"138.5. Ultra.violet" "Id":"..z.......", }'

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 2014-03-07
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多