我想使用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);}


但这仅输出Chapter字段,然后输出其余文本。我不确定如何将这些数据分为章节,标题和文本字段。

输入:

5.2你好

句子1.句子2。

电流输出为:

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

但我需要这样:

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

有什么帮助吗?

最佳答案

我假设您输入的格式是:

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


您以前使用分组的方式是不正确的,因为分组的数量始终取决于您为pattern.compile()使用的括号的对数。由于总共有三组,因此只需使用索引即可获得它们的值。

注意:group(0)是完整的东西,因此第一个组由索引1访问。

09-20 23:40