2016-04-12 16 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 

olarak çözüm ((...)\s\d{1,4})|(\d{1,4}) yakalamak için ama kabul etmiyorNormal ifade Oca 1987 de buldum 1987

+1

Lütfen aşağıya doğru bir neden veriniz –

+0

Bu sorular anlamsız - regexone açıklamalarını okuyun, [regex101.com] adresinden desenlerinizi deneyin (http://regex101.com), * Daha fazla ayrıntı için Web'de * arama yapın siteler, normal-expressions.info ve rexegg.com, ama çok daha fazlası var). –

cevap

2

Dene: numaradan önce isteğe bağlı bir sözcüğü seçecektir

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

Ancak, görevi tamamlamak için gerekenleri yakalamak için, RegexOne üzerindeki egzersizi görüntüledikten sonra aşağıdakileri kullanın:


Neyi yanlış yaptınız.

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

onu (yakalamak için çevrede \d{1,4}() ekleyin ve kaldırabilirsiniz:

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

Çok aşağıdaki kullanılmış olmalıdır, Yıl yanı sıra Ay Adı yakalamak için gerekli ... etrafında (), Ay Adından bu yana, örneğin Jan yakalanmasına gerek yoktur). Sen RegEx yakalayan edildi ya:

  • Jan 1999 ve Jan
  • VEYA
  • Şimdi
  • 1999

o yakalayacaktır:

  • Jan 1999 ve 1999
  • VEYA
  • 1999
+0

Bence bu kelime ve sayı arasında bir boşluk var ..! – Shafizadeh

+0

@Shafizadeh Eklendi, teşekkürler! ';)' – Druzion

+0

Kabul etmiyorum Bu senaryo sadece 19XX kabul ediyor ama değil Ocak 1987 –

2

Orijinal Mesaj

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

Regex

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

bir grup Unuttum RegexOne desenini eşleşecek.

Eşleşmeler Mon YEAR veya YEAR.

+0

Bu problemi çözmüyoruz.Ama yardım için teşekkürler.Yalnızca sadece 3 karakterle sınırlamak için ilk bölüm –

+0

++ kabul edildi. Ama cidden neden deseninde '\ b' kullandın? – Shafizadeh

+1

@SachinDivakar düzenlenmiş regex işleri, başlangıçtaki yoksun gruplar, lütfen bkz. Http://i.imgur.com/bme6kE2.png –

1

RegexOne için bir çalışma çözüm olacaktır:

düzgün metnini okumak gerekir
((Jan|May|Aug)\s(1987|1969|2011)) 

, görev hem yıl yanı sıra bütün tarihini yakalamak için [email protected] işaret
gibi, normal ifade hala çok gibi optimize edilebilir:

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

Bu, bütün tarih yakalar ay kısmı için olmayan bir yakalama grubunu kullanır ve yıl ayrı yakalar.

+0

Bu üç aylık “Jan”, “Mayıs”, “Agu” sadece bir örnektir. Sanırım başka ayların da adı var. – Shafizadeh

+0

@Druzion: Doğru ama egzersiz parantez ile ilgiliydi. – Jan

+0

@Shafizadeh: Hayır, örnekler doğrudan web sitesinden alınmıştır. – Jan