2017-07-07 43 views
-1

我遇到了正則表達式在ASCII表中解析列的問題。多行非終止正則表達式

想像這樣一個ASCII表:

COL1 | COL2 | COL3 
====================== 
ONE | APPLE | PIE 
---------------------- 
TWO | APPLE | PIES 
---------------------- 
THREE | PLUM- | PIES 
     | APRICOT | 

對於第2項微不足道的捕獲正則表達式做交易

(?:(?<COL1>\w+)\s*\|\s*(?<COL2>\w+)\s*\|\s*(?<COL3>\w+)\s*) 

然而,這正則表達式捕捉頭,以及它不捕獲第三條線。

我無法解決以下兩個問題:

  • 如何排除頭?
  • 如何擴展COL2捕獲組以捕獲多行條目PLUM-APRICOT

感謝您的幫助!

+2

嗯,不要用正則表達式嗎? – Aaron

+1

最好是在逐行閱讀時跳過第一行,閱讀其他內容並用'\\ s * \\ | \\ s *「分開# –

+0

@Aaron更好地使用Bison? ;) – calaedo

回答

1

有些人在遇到問題時認爲 「我知道,我會用正則表達式」。現在他們有兩個問題。 (http://regex.info/blog/2006-09-15/247

我假定輸入字符串,如:

String input = "" 
      + "\n" + "COL1 | COL2 | COL3" 
      + "\n" + "======================" 
      + "\n" + "ONE | APPLE | PIE " 
      + "\n" + "----------------------" 
      + "\n" + "TWO | APPLE | PIES" 
      + "\n" + "----------------------" 
      + "\n" + "THREE | PLUM- | PIES" 
      + "\n" + "  | APRICOT |  "; 

要拆分頭和表,你可以使用input.split("={2,}")。這將返回標題和表格的字符串數組。

修整表格後,您可以使用table.split("-{2,}")來獲取表格的行。

使用row.split("\\|")可將所有行轉換爲單元格數組。

處理多行記錄:在將行轉換爲單元格之前,可以撥打row.split("\n")來拆分多行記錄。 當這個拆分操作返回一個包含多個元素的數組時,它們應該在管道上拆分(split("\\|")),並且生成的單元格應該被合併。

從這裏它只是元素操縱,以獲得它的想要的格式。