2013-06-27 36 views
0

我正在抓我的頭。例如我有:REGEX:如何在特定關鍵字後找到日期格式?

Date 
sometext 
somtext 
27-7-2013 

我想要做的是我想在Date關鍵字後面得到第一個日期格式字符串模式。以下是我目前有:

(?i)(?<=date.*)\d+-\d+\d+ 

但不幸的是,我得到什麼,如果我只是試圖讓所有的字符串日期關鍵字後,如

(?i)date.* 

我只得到了結果爲:

Date[CR] 

我使用的Expresso來測試我的正則表達式。我使用正則表達式很新,所以我不熟悉如何做事情和東西。

請幫忙!謝謝!

+0

您需要啓用單行匹配。嘗試在前面添加一個「(?s)」標誌。 –

+1

不確定expresso是否支持非固定長度的lookbehinds。我知道很少有引擎支持它。另外,嘗試使用'(?s)',這應該使用'.'匹配換行符。這意味着嘗試以下方法:'(?s)(?i)date。*?\ d + - \ d + - \ d +' – HamZa

回答

0

我不會在這種情況下使用lookbehind斷言,也無限長的lookbehinds(我認爲)只支持.net。

我會用一個捕獲組,而不是:

(?is)date.*?(\d{1,2}-\d{1,2}-\d{4}) 

你會發現第一個捕獲組的日期。

查看它here on Regexr

(?is)被啓用的情況下的獨立匹配模式i和單線模式s,才使得.也匹配換行符。

.*?是懶惰地匹配任何字符。

(\d{1,2}-\d{1,2}-\d{4})匹配一個或兩個數字,一個短劃線,一個或兩個數字,一個短劃線,然後是4個數字。

0

你可以看看這個表達式:

(?i)(?<=Date)[\S\s]*?(\d{1,2}-\d{1,2}-(?:\d{4}|\d{2})) 

在你的正則表達式,你也缺少-前的最後\d+。此正則表達式將處理year部分與四位數字以及兩位數字。

相關問題