我想使用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访问。