【问题标题】:How do i remove a specefic character from a file?如何从文件中删除特定字符?
【发布时间】:2013-11-13 16:34:34
【问题描述】:

我有这个格式的 JSON 文件;

[{
"item-id" : "0",
"item-name" : "Dwarf remains",
"item-examine" : "The body of a Dwarf savaged by Goblins.",
"shop-value" : "0.0",
"low-alch" : "0.0",
"high-alch" : "0.0",
"stab-bonus" : "0",
"slash-bonus" : "0",
"crush-bonus" : "0",
"magic-bonus" : "0",
"ranged-bonus" : "0",
"stab-defence" : "0",
"slash-defence" : "0",
"crush-defence" : "0",
"magic-defence" : "0",
"ranged-defence" : "0",
"strength-bonus" : "0",
"prayer-bonus" : "0",
},
{
"item-id" : "1",
"item-name" : "Toolkit",
"item-examine" : "Good for repairing a broken cannon.",
"shop-value" : "0.0",
"low-alch" : "0.0",
"high-alch" : "0.0",
"stab-bonus" : "0",
"slash-bonus" : "0",
"crush-bonus" : "0",
"magic-bonus" : "0",
"ranged-bonus" : "0",
"stab-defence" : "0",
"slash-defence" : "0",
"crush-defence" : "0",
"magic-defence" : "0",
"ranged-defence" : "0",
"strength-bonus" : "0",
"prayer-bonus" : "0",
}]

但有 25 000 个条目

但是文件有问题;

"prayer-bonus" : "0",

应该是

"prayer-bonus" : "0"

我怎样才能使用正则表达式或其他什么来只替换最后一位?

我正在使用 java。

顺便说一句:值并不总是“0”

那么我怎样才能让它成为一个通配符来替换所有呢?

【问题讨论】:

  • 为什么不简单地使用 String.replace()?您不需要任何正则表达式即可将 "prayer-bonus" : "0", 替换为 "prayer-bonus" : "0"
  • @JBNizet 我敢肯定它可能并不总是“0”。按照这个逻辑,他可以将这个确切的文件硬编码到他的程序中。
  • 打开notepad++并替换字符串
  • 使用 String.contains() - 搜索祈祷奖励,然后获取最后一个字符,如果是 a ,则删除它。

标签: java regex replace character


【解决方案1】:

您可以使用这个(用java风格编写,与replaceAll()方法一起使用):

search: (?<!\\\\)(\"(?>[^\\\"]++|\\\\{2}|\\\\.)*+\"),(\\s*+})
replace: $1$2

这种模式的主要目的是避免可能在引号内的转义双引号。

例子:

String pattern = "(?<!\\\\)(\"(?>[^\\\"]++|\\\\{2}|\\\\.)*+\"),(\\s*+})";
String result = yourJson.replaceAll(pattern, "$1$2");

【讨论】:

  • 工作就像一个魅力非常感谢你这个网站很棒!
【解决方案2】:

使用 sed:

sed -i.bak 's/\("prayer-bonus" : "0"\),/\1/' file

匹配任意数字:

sed -i.bak 's/\("prayer-bonus" : "[0-9]*"\),/\1/' file

【讨论】:

  • 这很有帮助,谢谢! sed是内置在windows中的吗?并且值“0”可以是任何东西,而不仅仅是 0 任何想法?
【解决方案3】:

您似乎正在尝试修补由格式不正确的 JSON blob 引起的问题。您可以采用其他响应者的回答,即使用 sed 来修复这些症状,但问题在于 JSON 的创建方式。

【讨论】:

    【解决方案4】:

    任何文本编辑器都可以解决问题。

    或者你可以从java调用字符串替换。不需要正则表达式。

    【讨论】:

    • 我的问题并不总是“0” :)
    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多