我想使用带有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."}
任何帮助?
答案 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访问。