2017-01-03 3 views
-2

ich in diesen Fällen eine Regex tun versuchen:Optional Gruppen in regex

1) Any title  
2) Any title (2016)  
3) Any title (2016 Any text) 

Ich brauche den Text vor der Klammer (Titel) und das Jahr innen (Jahr). Beispiel für die Fälle:

1)

Title: Any title 
Year: null 

2)

Title: Any title 
Year: 2016 

3)

Title: Any title 
Year: 2016 

ich diese regex:

(.*)(?:\s(\((\d+)(?:\D*)?)\))? 

Aber nicht funktionieren.

Antwort

2

könnten Sie gehen für:

^     # start of the string 
(?P<title>[^\n()]+) # anything not a (,) or newline -> "title" 
(?:     # non-capturing group 
    \(    # (literally 
    (?P<year>\d{4}) # four digits -> "year" 
    [^)]*\)   # anything not), followed by) 
)?     # make the whole group optional 

a demo on regex101.com See.
Wenn benannte erfasste Gruppen nicht unterstützt werden (Sie haben keine Programmiersprache angegeben), lassen Sie einfach den ?P<> Teil weg und verwenden Sie stattdessen die Gruppennummern 1 und 2.