2012-09-06 168 views
2

工作不使用正則表達式,我想匹配以下字符串:非捕獲組正則表達式

January 25 
Jan 25 

我單獨捕捉月份和日期部分,但只想返回月份名稱的前3個字符如果有整整一個月的名字,所以我使用非捕獲組(?:)的人物「uary」:

(?<M>(Jan(?:uary)?)) (?<D>\d\d) 

不幸的是,該集團M總是返回月份的全稱;即它也捕獲非捕獲組。

我已打開ExplicitCapture標誌。我已經使用RegExBuilder和Rad Software的正則表達式設計器來確保它不是因爲該工具。

+0

哪種語言?正則表達式有幾種不同的風格,不同的主機語言使用不同的風格。 –

+0

這是.NET Fx。 (4.0如果重要)。 – dotNET

回答

4

您的捕獲組只應包圍Jan

(?<M>Jan)(?:uary)? (?<D>\d{1,2}) 

您的原始表達式大致相當於(?<M>January|Jan) (?<D>\d\d)。非捕獲組並不意味着將匹配從現有捕獲組中移除。這意味着只有沒有創建新的捕獲組。

+0

不起作用。 Upvoted? – dotNET

+0

@dotNET:嘗試更新。 –

+0

這一個工程。謝謝。 – dotNET

1

嘗試:

(?<M>Jan)(?:uary)? (?<D>\d\d)