2016-05-19 49 views
0

我有文字如下(使用Java)正則表達式來檢測與浮點數或N的最後一行/一

HrtBrn n/a 
Regurg n/a 
ChestP 8.3 
Cough n/a 
Belch n/a 
Other 0.0 
Epigastric Pain n/a 
Throat Burn n/a 
Vomiting n/a 
Stomach Pain n/a 
A load of other stuff and text 
HrtBrn n/a 
Regurg n/a 
ChestP 8.3 
Cough n/a 
Belch n/a 
Other 0.0 

但是這也可能是

HrtBrn n/a 
Regurg n/a 
ChestP 8.3 
Cough n/a 
Belch n/a 
Other 0.0 
some other text blabla 
HrtBrn n/a 
Regurg n/a 
ChestP 8.3 

它總是HrtBrn開始但最終總是以十進制數或n/a結束,但最後一行中的單詞可能會有所不同。我想獲得不具有十進制或N/A在其上如在第一個例子HrtBrn和下一行之間的文本塊以上,我想捕捉

 HrtBrn n/a 
    Regurg n/a 
    ChestP 8.3 
    Cough n/a 
    Belch n/a 
    Other 0.0 
    Epigastric Pain n/a 
    Throat Burn n/a 
    Vomiting n/a 
    Stomach Pain n/a 

我有麻煩得到一個捕獲包括'十進制或n/a' - 我可以得到最後一位小數(所以在上面的兩個例子中,我得到'Other 0.0')與HrtBrn.*\d+\.(\d*|n\/a),但我不能得到最後的n/a與此 這裏是我的正則表達式

+0

所以第一個例子應該符合'胃痛n/a'? – anubhava

+0

是的,它應該包括n/a –

+0

它會以十進制數或n/a結尾,但不是兩個,如果這就是你的意思 –

回答

1

您可以使用此正則表達式來匹配DOTALL標誌:

HrtBrn.*?\n[^\n]* +(?:\d+\.\d+|n/a)(?!\s+[^\n]* +(?:\d+\.\d+|n/a)) 

RegEx Demo

這將匹配直到在一個十進制數或n/a從而結束最後一行。

+1

完美,這很好。謝謝 –

+0

這是否匹配正常文本之前的最後一行?現在我明白了你的另一個問題 - 在普通文本後面可以有另外一個不帶HrtBrn的列表。我應該已經更清楚 –

+0

如果你更新這種問題,如果輸入,那麼我會嘗試重寫我的正則表達式。 – anubhava

相關問題