2016-04-12 42 views
0
Exercise 12: Matching Nested Groups 
Task Text Capture Groups 
Capture Jan 1987 Jan 1987 1987 Failed 
Capture May 1969 May 1969 1969 Failed 
Capture Aug 2011 Aug 2011 2011 Failed 

我找到了解決辦法((...)\s\d{1,4})|(\d{1,4})但它不接受正則表達式捕捉到1987年一月,以及1987年

+1

請給出一個downvoting的原因 –

+0

這些問題沒有任何意義 - 閱讀regexone的解釋,在[regex101.com](http://regex101.com)嘗試你的模式,*搜索Web *獲取更多細節網站是regular-expressions.info和rexegg.com,但還有更多)。 –

回答

2

嘗試:

([A-Za-z]+\s)?\d{1,4} 

將在號碼前選擇一個可選字

但是,在RegexOne上觀看練習後,要捕捉完成任務所需的內容,請使用:

((?:[A-Za-z]+\s)?(\d{1,4})) 

你做錯了什麼。

((...)\s\d{1,4})|(\d{1,4}) 

你需要收集年度以及每月名稱,所以你應該使用如下:

(...\s(\d{1,4}))|(\d{1,4}) 

添加()各地\d{1,4}捕捉到它(你可以刪除()圍繞...,因爲月份名稱,例如Jan不需要被捕獲)。你正則表達式被捕獲或者:

  • Jan 1999Jan
  • 1999

現在將捕獲:

  • Jan 19991999
  • OR
  • 1999
+0

我認爲這個詞和數字之間有一個空格。 – Shafizadeh

+0

@Shafizadeh新增,謝謝! ';)' – Druzion

+0

它不接受這種情況是它只接受19XX,但不是1987年1月 –

2

原始交

\b((\w{3})?\s\d{4})\b 

正則表達式匹配RegexOne圖案

((\w{3})?[\s\b](\d{4})) 

忘記的基團。

匹配Mon YEARYEAR

+0

它並不能解決問題親愛的。感謝您的幫助,但它只接受第一部分 –

+0

++限制月份名稱爲3個字符。但是,爲什麼你在你的模式中使用'\ b'? – Shafizadeh

+1

@SachinDivakar編輯正則表達式作品,最初缺少的組,請參閱http://i.imgur.com/bme6kE2.png –

1

RegexOne一個工作的解決辦法是:

((Jan|May|Aug)\s(1987|1969|2011)) 

您需要正確閱讀文本,任務是既捕捉還有全日
作爲@Druzion指出,正則表達式仍然可以優化的,就像這樣:

((?:Jan|May|Aug)\s(\d{4})) 

這捕獲整個日期,使用非捕獲組當月部分和今年分別捕獲。

+0

這三個月份的'Jan','May','Agu'只是一個例子。我想也有其他幾個月的名字。 – Shafizadeh

+0

@Druzion:沒錯,但練習是關於括號。 – Jan

+0

@Shafizadeh:不,這些例子是直接從網站上獲取的。 – Jan