<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _time_regex_match(regex: str, utterance: str, char_offset_to_token_index: Dict[int, int], map_match_to_query_value: Callable[[str], List[int]], indices_of_approximate_words: Set[int]) -> Dict[str, List[int]]: r""" Given a regex for matching times in the utterance, we want to convert the matches to the values that appear in the query and token indices they correspond to. ``char_offset_to_token_index`` is a dictionary that maps from the character offset to the token index, we use this to look up what token a regex match corresponds to. ``indices_of_approximate_words`` are the token indices of the words such as ``about`` or ``approximately``. We use this to check if a regex match is preceded by one of these words. If it is, we also want to add the times that define this approximate time range. ``map_match_to_query_value`` is a function that converts the regex matches to the values that appear in the query. For example, we may pass in a regex such as ``\d+pm`` that matches times such as ``7pm``. ``map_match_to_query_value`` would be a function that takes ``7pm`` as input and returns ``1900``. """

    linking_scores_dict: Dict[str, List[int]] = defaultdict(list)
    number_regex = re.compile(regex)
    for match in number_regex.finditer(utterance):
        query_values = map_match_to_query_value(match.group())
        # If the time appears after a word like ``about`` then we also add
        # the times that mark the start and end of the allowed range.
        approximate_times = []
        if char_offset_to_token_index.get(match.start(), 0) - 1 in indices_of_approximate_words:
            approximate_times.extend(get_approximate_times(query_values))
        query_values.extend(approximate_times)
        if match.start() in char_offset_to_token_index:
            for query_value in query_values:
                linking_scores_dict[str(query_value)].extend([char_offset_to_token_index[match.start()],
                                                              char_offset_to_token_index[match.start()] + 1])
    return linking_scores_dict