Is there a way to find contacts who have multiple active or expired memberships?
If you have sql access you can run this query.  

SELECT c.display_name,
       count(*)
FROM   civicrm_contact c
JOIN   civicrm_membership m 
ON     c.id = m.contact_id 
WHERE  m.contact_id = c.id
GROUP BY 1
HAVING count(*) &gt; 1


If you only want active memberships then add the following line between the where line and the group by line

AND now() between start_date and end_date


You didn't ask for this but if you want people with multiples of the same current membership type then you can use this code:

SELECT c.id,
       c.display_name,
       mt.name,
       count(*)
from   civicrm_contact c,
       civicrm_membership_type mt,
       civicrm_membership m
where  m.contact_id = c.id
and    m.membership_type_id = mt.id
and    now() between m.start_date and m.end_date -- current only
group by 1,2,3
having count(*) &gt; 1
order by 3,1