Filter out any objects that do not have attributes with values matching
    *all* regular expressions present in grep (AND, essentially)

    :param objects ADObject: A list of ADObjects
    :param grep list: A list of regular expressions that must match for filtering

    :return: A list of filtered ADObjects
    :rtype: list

def object_filter(objects, grep):
    """Filter out any objects that do not have attributes with values matching
    *all* regular expressions present in grep (AND, essentially)

    :param objects ADObject: A list of ADObjects
    :param grep list: A list of regular expressions that must match for filtering

    :return: A list of filtered ADObjects
    :rtype: list
    """
    filtered = []
    if grep:
        for ad_object in objects:
            o_string = ' '.join([value for value in ad_object.to_dict().values()
                                 if isinstance(value, str)])
            skip = False
            for regex in grep:
                if not re.search(regex, o_string, re.M|re.S|re.I):
                    skip = True
                    break
            if not skip:
                filtered.append(ad_object)

        return filtered
    else:
        return objects