import re


def FloatStringToFloat(float_string, problems=None):
    """Convert a float as a string to a float or raise an exception"""
    # Will raise TypeError unless a string
    match = re.match(r"^[+-]?\d+(\.\d+)?$", float_string)
    # Will raise TypeError if the string can't be parsed
    parsed_value = float(float_string)

    if "x" in float_string:
        # This is needed because Python 2.4 does not complain about float("0x20").
        # But it does complain about float("0b10"), so this should be enough.
        raise ValueError()

    if not match and problems is not None:
        # Does not match the regex, but it's a float according to Python
        problems.InvalidFloatValue(float_string)
    return parsed_value