【问题标题】:How to use regular expression to format json file如何使用正则表达式格式化json文件
【发布时间】:2017-04-05 17:31:59
【问题描述】:

我想使用 java 的正则表达式将文本文件写入 json 文件。

意思是我想要一个包含这个的文本文件:

5.2 你好

第 1 句。第 2 句。

变成这样:

{"Chapter": "5.2",
  "Title": "Hello",
  "Text": "Sentence 1. Sentence 2."}

我有一些代码可以匹配我的文本文件中的某些字段并将其输出到 json,但是我不确定如何使用正则表达式将 json 分解为我需要的部分。

我正在尝试这个:

 Pattern p = Pattern.compile((\d\.\d)(.*?)(?=\d\.\d|$));
 Matcher m = p.matcher(readFile(text));
 while(m.find()) {
 obj.put("Chapter", m.group());
 System.out.println(obj);}

但这只会输出章节字段,然后是其余的文本。我不确定如何将这些数据拆分为章节、标题和文本字段。

输入:

5.2 你好

第 1 句。第 2 句。

当前输出为:

{"Chapter": "5.2 Hello Sentence 1. Sentence 2."}

但我需要它是这样的:

{"Chapter": "5.2", "Title": "Hello", "Text": "Sentence 1. Sentence 2."}

有什么帮助吗?

【问题讨论】:

  • 您能否提供一个更清晰的输入和输出示例?是否有连续的章节适合一个 json 对象?
  • @horcrux 我在具体的输入输出中添加了
  • @Alexander Farber 多余的逗号是一个错误,我将其编辑了。我将如何使用 Gson 进行解析?我认为正则表达式是最好的方法
  • @Alexander Farber 谢谢!

标签: java json regex


【解决方案1】:

我假设您的输入格式为:

5.2 你好\n

随便什么文字...

你的想法是正确的。既然你想把原文分成三个部分。您只需要利用部分之间的边界。例如,“5.2”和“Hello”在中间有一个空格(\s),“Hello”在正文之前有一个新行(或者可能是另一个空格)。

你可以试试:

    Pattern p = Pattern.compile("(\\d+\\.\\d+)\\s+(.*?)\\n(.*$)");
    Matcher m = p.matcher(text);
    if(m.find()) {
        obj.put("Chapter", m.group(1));
        obj.put("Title", m.group(2));
        obj.put("Text", m.group(3));
        System.out.println(obj);
    }

您之前使用 group 的方式不正确,因为 group 的数量始终取决于您的 pattern.compile() 有多少对括号。由于您总共将拥有三个组,因此只需使用索引来获取它们的值。

注意:group(0) 是完整的,所以第一个组是通过索引 1 访问的。

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多