import re


def get_sections(text):
    """Returns docstring sections.

    Args:
        text (str): The raw docstring for extracting sections.

    Returns:
        sections (list): The extracted sections.
    """
    pattern = re.compile(
        r"(?<=\s)(Args|Returns|Example|Demo)\s*:\n", flags=re.S
    )

    sections = []
    if text is not None:
        tokens = []
        tokens.append((None, 0, 'Overview'))
        for m in pattern.finditer(text):
            s, e = m.span()
            header = m.group(0)[:-2]
            tokens.append((s, e, header))
        tokens.append((len(text), None, None))

        for cur, nxt in zip(tokens, tokens[1:]):
            _, s, header = cur
            e, _, _ = nxt
            body = text[s:e]
            sections.append({'header': header, 'body': body})
    return sections