code: @Nullable
    public static SegmentId tryParse(String dataSource, String segmentId)
    {
      List<SegmentId> possibleParsings = iteratePossibleParsingsWithDataSource(dataSource, segmentId);
      return possibleParsings.isEmpty() ? null : possibleParsings.get(0);
    }
docs: Tries to parse a segment id from the given String representation, or returns null on failure. If returns a non-null
  {@code SegmentId} object, calling {@link #toString()} on the latter is guaranteed to return a string equal to the
  argument string of the {@code tryParse()} call.
  
  It is possible that this method may incorrectly parse a segment id, for example if the dataSource name in the
  segment id contains a DateTime parseable string such as 'datasource_2000-01-01T00:00:00.000Z' and dataSource was
  provided as 'datasource'. The desired behavior in this case would be to return null since the identifier does not
  actually belong to the provided dataSource but a non-null result would be returned. This is an edge case that would
  currently only affect paged select queries with a union dataSource of two similarly-named dataSources as in the
  given example.
  
  Another source of ambiguity is the end of a segment id like '_123' - it could always be interpreted either as the
  partitionNum of the segment id, or as the end of the version, with the implicit partitionNum of 0. This method
  prefers the first iterpretation. To iterate all possible parsings of a segment id, use {@link
  #iteratePossibleParsingsWithDataSource}.
  
  @param dataSource the dataSource corresponding to this segment id
  @param segmentId segment id
  @return a {@link SegmentId} object if the segment id could be parsed, null otherwise