2015-09-05 74 views
0

我正在C#中編寫一個應用程序,用於解析一些文本文件並從中獲取信息。我需要解析下面的表格數據,並將信息填充到類的屬性中。用正則表達式解析表格數據

我對錶格和列標題沒有問題。我也可以用捕捉組得到的數據,但在某些情況下,某些值可能爲空(或者可能包含空格,如在第四數據線,COL6)

樣品:

=============================================================================== 
Table Header 
=============================================================================== 
Col1   Col2  Col3 Col4 Col5  Col6 
------------------------------------------------------------------------------- 
21   abc  xyz xyz 1   blablabla 
22   abc  xyz  1   bla-bla-bla 
103   abc  xyz xyz 1   
4000   abc  xyz xyz 1   blabla bla 
4001   abc  xyz xyz 1   

我有數據線這樣的模式:

([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)?$ 

它正常工作時,所有列包含數據。當我在最後一個捕獲組(對於Col6)的字符類中添加一個空白字符時,它開始將兩個連續的行匹配在一起。我需要逐行匹配。我怎樣才能做到這一點?第二個問題是,對於許多列,我需要「任何字符但空間」的方法,我在捕獲組中使用此模式:([\ w \ d -_。*#:\/\ <>] +)

如果數據可能包含空格,我將爲此模式添加一個空白字符。這是正確的方法嗎?或者在這樣的文本中出現問題(例如列不匹配)?

謝謝

+1

兩列之間是否存在修復長度或是否有tab分隔? –

回答

0

這不能用正則表達式來完成。

要解釋爲什麼,讓我們第2行中的數據:

Col1   Col2  Col3 Col4 Col5  Col6 
------------------------------------------------------------------------------- 
22   abc  xyz  1   bla-bla-bla 

你接近這種情況下能匹配「1」作爲COL4,用空COL5的方式。沒有條件告訴正則表達式引擎「1」實際上是第5列。 Live example

假設數據長度是固定的,我建議使用String.Substring()


至於你第二個問題
任何字符,但空間= [^ ]使用Negated character class
或者你可以使用\S(任char但空白)

+0

我認爲,每列的最大長度是固定的,所以我決定使用這種方法。感謝幫助 –