m = re.search(
    '^(?P<description>.*?)(Arguments:(?P<arguments>.*?))?(Returns:(?P<returns>.*))?$'
    , s, re.DOTALL)
m.groupdict()['description']
m.groupdict()['arguments']
m.groupdict()['returns']
regex: string with optional parts