code: def find_in_line(line):  # type: (str)->Tuple[Optional[str],Optional[str]]
      
      if not line:
          return None, None
      for version_token in version_tokens:
  
          by_ast = find_by_ast(line, version_token)
          by_ast = validate_string(by_ast)
          if by_ast:
              return by_ast, version_token
  
          by_string_lib = find_version_by_string_lib(line, version_token)
          by_string_lib = validate_string(by_string_lib)
          if by_string_lib:
              return by_string_lib, version_token
  
          by_regex = find_version_by_regex(line, version_token)
          by_regex = validate_string(by_regex)
          if by_regex:
              return by_regex, version_token
      return None, None
docs: Use three strategies to parse version string
      :param line:
      :return: