2014-02-20 38 views
1

輸入線:如何使用正則表達式捕捉空字段?

Line1 \t435\tYes   #expected extraction ("", "435", "Yes") 
Line2 A1\t222\tYes   #expected extraction ("A1", "222", "Yes") 
Line3 A2\t223\tYes   #expected extraction ("A2", "223", "Yes") 

對於我的Java代碼,

Pattern p = Pattern.compile("(.*)\\t(.*)\\t(.*)"); 
Matcher m = p.matcher(.....) 

我需要使用正則表達式來獲取,雖然線各領域,正則表達式工程2號線和3號線。但是,我注意到(。*)不會捕獲第1行中的空字段。任何想法?非常感謝!

回答

0

試試這個微小的調整:

Pattern p = Pattern.compile("^(.*)\\t(.*)\\t(.*)"); 

這迫使「從一開始」所以會有一個「空」難擋\t前的「一無所有」的搜索。

但說實話 - 如果你看http://regex101.com/r/yH3zG3它似乎確實表達你的表情應該沒有修改。您的文件中是否還有其他內容?如果切換線的順序會發生什麼?你從第一行得到了什麼?

+0

你是對的。看起來像我的輸入數據有其他問題。因此,第1行中的「製表符」未被讀取。感謝您指出。 – Richard

+0

@理查德 - 很高興我能指出你正確的方向。它經常發生「這個問題不在你正在顯示的代碼中」 - 但有時候這就是你需要聽到的才能在正確的位置開始搜索。 「一旦有人告訴你它真的在那裏,很容易在乾草堆裏找到針。」 – Floris