正则表达式中的可选组

时间:2017-01-03 21:43:45

标签: regex

我正在尝试为这种情况做一个正则表达式:

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

我需要括号(标题)和年内(年)之前的文本。案例示例:

1)

Title: Any title   
Year: null

2)

Title: Any title   
Year: 2016

3)

Title: Any title   
Year: 2016

我这样做正则表达式:

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

但是不行。

1 个答案:

答案 0 :(得分:2)

你可以去:

^                   # 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 如果不支持命名的捕获组(您没有指定任何编程语言),只需省略?P<>部分并使用组号12代替。