2014-09-28 56 views
0

我試圖捕捉到下面的3個數字在三個行如何在行正則表達式打破

xxxxxxxx 
xxxxxxxx 
Matches 
1 - 60 
out of 92 
xxxxxxxx 
xxxxxxxx 

我不能讓我的正則表達式的字符串工作。到目前爲止,我有以下幾種: -

Matches.*?\n.*[0-9]*.*?-.*?[0-9]*\nout of.*?[0-9]* 

我已經嘗試了一些在線正則表達式測試和c#中。

最新資訊

我發現的實際問題,是因爲輸入文本包含CR(無LF)來表示新行如此明顯的匹配\ n不工作。所以現在要匹配我正在使用的新行[\ r | \ r \ n]。

回答

3

[0-9]*轉換爲[0-9]+並在其周圍添加圓括號來捕獲它。

Matches.*?\n.*([0-9]+).*?-.*?([0-9]+)\nout of.*?([0-9]+) 

DEMO

  • *重複先前令牌零次或多次。
  • +重複上一個令牌一次或多次。

OR

如果使用*[0-9]那麼你需要到以前的模式.*改變.*?因爲*是默認的貪婪。您需要通過在*之後添加?將其設置爲非貪婪。所以它不會吃掉下面的零個或多個數字。

Matches.*?\n.*?([0-9]*).*?-.*?([0-9]*)\nout of.*?([0-9]*)\n 

如果使用此Matches.*?\n.*?([0-9]*).*?-.*?([0-9]*)\nout of.*?([0-9]*)正則表達式,它不會捕獲因爲[0-9]*(零個或多個數字)的最後一個數字,所以你還需要符合以下字符來捕獲最後一個號碼。

DEMO

1

試試這個:

(?m)Matches[\s\S]*?\nout of[ ]*[0-9]+