code: def with_zero_or_one(cls, converter, pattern=None):
          
          cardinality = Cardinality.zero_or_one
          if not pattern:
              pattern = getattr(converter, "pattern", cls.default_pattern)
          optional_pattern = cardinality.make_pattern(pattern)
          group_count = cardinality.compute_group_count(pattern)
  
          def convert_optional(text, m=None):
              if text:
                  text = text.strip()
              if not text:
                  return None
              return converter(text)
          convert_optional.pattern = optional_pattern
          # OLD: convert_optional.group_count = group_count
          convert_optional.regex_group_count = group_count
          return convert_optional
docs: Creates a type converter for a T with 0..1 times
          by using the type converter for one item of T.
  
          :param converter: Type converter (function) for data type T.
          :param pattern:  Regexp pattern for an item (=converter.pattern).
          :return: type-converter for optional<T> (T or None).