如何使用正则表达式格式化json文件

时间:2017-04-05 17:31:59

标签: java json regex

我想使用带有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."}

任何帮助?

1 个答案:

答案 0 :(得分:2)

我假设您的输入采用格式:

5.2 Hello \ n

无论什么文字......

你的思维方式是正确的。由于您希望将原始文本分为三个部分。您只需要使用各部分之间的边界。例如," 5.2"和#34;您好"在bewteen中有一个空格(&s),"你好"在正文之前有一个新行(或者可能是另一个空格)。

您可以尝试:

    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);
    }

您之前使用组的方式不正确,因为组的数量总是取决于您对pattern.compile()的支架对数。由于您总共有三个组,只需使用索引来获取它们的值。

注意:group(0)是整个事物,因此第一组由索引1访问。