import re


def part_one(data: str) -> int:
    """Sum all numbers present in data."""
    # Pattern uses lookahead and lookbehind to make sure we get the full
    # numbers. Simply including non-numbers outside the matching group causes
    # problems if two numbers are separated by a single token, e.g. '1,2'.
    pattern = re.compile(r'(?<=[^0-9])(?P<number>-?\d+)(?![0-9])')
    return sum(map(int, pattern.findall(data)))