import re


def version_greater_or_equal_than(version_str, other_version_str):
    """ Checks if a version number is >= than another version number

    Version numbers are passed as strings and must be of type "N.M.Rarb" where N, M, R
    are non negative decimal numbers < 1000 and arb is an arbitrary string.
    For example, "1.2.3" or "1.2.3dev" or "1.2.3-dev" or "1.2.3 dev" are valid version strings.

    Returns:
        True if the version number is equal or greater then the other version number,
        otherwise false

    """
    def ver_str_to_float(ver_str):
        """ Parse version string and returns it as a floating point value

        Returns The version string as floating point number for easy comparison
        (minor version and relase number padded with zeros). E.g. "1.23.4dev" -> 1.023004.
        If conversion fails returns NaN.

        """
        m = re.search(r"(\d+).(\d+).(\d+)[-\w]*", ver_str)
        if m is not None:
            ver_maj, ver_min, ver_rel = m.groups()
            return float("{}.{:0>3}{:0>3}".format(ver_maj, ver_min, ver_rel))
        else:
            return float("nan")

    return ver_str_to_float(version_str) >= ver_str_to_float(other_version_str)