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

ich die Lösung ((...)\s\d{1,4})|(\d{1,4}) gefunden, aber es ist die Annahme nichtRegulärer Ausdruck zu erfassen Januar 1987 sowie 1987

+1

Bitte geben Sie einen Grund für die Ablehnung –

+0

Diese Fragen machen keinen Sinn - lesen Sie die Regexon-Erklärungen, versuchen Sie Ihre Muster bei [regex101.com] (http://regex101.com), * suchen Sie im Web * für weitere Details (am besten Sites sind reguläre-expressions.info und rexegg.com, aber es gibt viel mehr). –

Antwort

2

Versuchen:

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

die ein optionales Wort vor der Nummer wählen

Nachdem Sie jedoch die Übung auf RegexOne gelesen haben, können Sie Folgendes erfassen:

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

Was Sie falsch gemacht haben.

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

Sie benötigten, um das Jahr sowie die Monatsnamen zu erfassen, so Sie verwendet haben sollten folgendes:

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

hinzufügen () um \d{1,4} es zu erfassen (und Sie können das entfernen () um die ..., da der Monatsname zB Jan nicht erfasst werden muss). Sie RegEx wurde die Erfassung entweder:

  • Jan 1999 und Jan
  • OR
  • 1999

Jetzt wird es erfassen:

  • Jan 1999 und 1999
  • OR
  • 1999
+0

Ich denke, es gibt einen weißen Zwischenraum zwischen diesem Wort und der Nummer ..! – Shafizadeh

+0

@Shafizadeh Hinzugefügt, danke! ';)' – Druzion

+0

Es ist nicht akzeptabel Das Szenario ist es akzeptiert nur 19XX, aber nicht Jan 1987 –

2

Original-Beitrag

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

Regex das RegexOne Muster

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

eine Gruppe passen vergessen.

Übereinstimmungen Mon YEAR oder YEAR.

+0

Es löst nicht das Problem dear.Thanks für die Hilfe though.It nur akzeptiert ersten Teil –

+0

++ für die Begrenzung des Monats Name auf nur 3 Zeichen. Aber ernsthaft, warum hast du '\ b' in deinem Muster verwendet? – Shafizadeh

+1

@SachinDivakar der bearbeitete Regex funktioniert, die ersten fehlenden Gruppen, siehe http://i.imgur.com/bme6kE2.png –

1

würde Eine Arbeitslösung für RegexOne sein:

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

Sie müssen den Text richtig lesen, die Aufgabe sowie die ganze Datum sowohl die Jahre zu erfassen war.
Wie @Druzion wies darauf hin, kann immer noch die Regex optimiert werden, etwa so:

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

Das das ganze Datum erfaßt, verwendet für den Monat Teil einer nicht einfangende Gruppe und fängt das Jahr getrennt.

+0

Diese drei Monate 'Jan',' Mai', 'Agu' sind nur als ein Beispiel. Ich denke, da ist der Name anderer Monate auch. – Shafizadeh

+0

@Druzion: True, aber die Übung war über Klammern. – Jan

+0

@Shafizadeh: Nein, die Beispiele stammen direkt von der Website. – Jan