2017-04-05 156 views
0

我想使用正則表達式使用java將文本文件寫入json文件。如何使用正則表達式來格式化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

願你提供輸入和輸出更清晰的例子嗎?是否有連續的章節適合一個json對象? – horcrux

+0

@horcrux我在特定的輸入和輸出中添加了 – fluxing23

+0

@Alexander Farber額外的逗號是一個錯誤,我將其編輯了出來。我將如何使用Gson解析?我認爲正則表達式是最好的方式 – fluxing23

回答

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()。既然你總共有三組,那麼只需使用索引來獲得它們的價值。

注:組(0),是整個事情,所以第一組由索引訪問1.

+0

謝謝!這工作完美! – fluxing23