# Source code for dateparser.search

    from dateparser.search.search import DateSearchWithDetection

    _search_with_detection = DateSearchWithDetection()

    def search_dates(
        text,
        languages=None,
        settings=None,
        add_detected_language=False,
        detect_languages_function=None,
    ):
        """Find all substrings of the given string which represent date and/or time and parse them.

        :param text:
            A string in a natural language which may contain date and/or time expressions.
        :type text: str

        :param languages:
            A list of two letters language codes.e.g. ['en', 'es']. If languages are given, it will
            not attempt to detect the language.
        :type languages: list

        :param settings:
            Configure customized behavior using settings defined in :mod:`dateparser.conf.Settings`.
        :type settings: dict

        :param add_detected_language:
            Indicates if we want the detected language returned in the tuple.
        :type add_detected_language: bool

        :param detect_languages_function:
            A function for language detection that takes as input a `text` and a `confidence_threshold`,
            and returns a list of detected language codes.
            Note: detect_languages_function is only uses if `languages` are not provided.
        :type detect_languages_function: function

        :return: Returns list of tuples containing:
            substrings representing date and/or time, corresponding :mod:`datetime.datetime`
            object and detected language if *add_detected_language* is True.
            Returns None if no dates that can be parsed are found.
        :rtype: list
        :raises: ValueError - Unknown Language

        >>> from dateparser.search import search_dates
        >>> search_dates('The first artificial Earth satellite was launched on 4 October 1957.')
        [('on 4 October 1957', datetime.datetime(1957, 10, 4, 0, 0))]

        >>> search_dates('The first artificial Earth satellite was launched on 4 October 1957.',
        >>>              add_detected_language=True)
        [('on 4 October 1957', datetime.datetime(1957, 10, 4, 0, 0), 'en')]

        >>> search_dates("The client arrived to the office for the first time in March 3rd, 2004 "
        >>>              "and got serviced, after a couple of months, on May 6th 2004, the customer "
        >>>              "returned indicating a defect on the part")
        [('in March 3rd, 2004 and', datetime.datetime(2004, 3, 3, 0, 0)),
         ('on May 6th 2004', datetime.datetime(2004, 5, 6, 0, 0))]

        """
        result = _search_with_detection.search_dates(
            text=text,
            languages=languages,
            settings=settings,
            detect_languages_function=detect_languages_function,
        )
        dates = result.get("Dates")
        if dates:
            if add_detected_language:
                language = result.get("Language")
                dates = [date + (language,) for date in dates]
            return dates