on results in the respective property set to None. Setting any of the properties results in the full_version being recomputed and the rest of the properties set from that. It also implements __str__, just returning the raw version given to the initializer. zd^((?P\d+):)?(?P[A-Za-z0-9.+:~-]+?)(-(?P[A-Za-z0-9+.~]+))?$)