text: # Copyright (c) 2010 Doug Hellmann.  All rights reserved.
  #
  """Find email addresses that match the person's name
  """
  
  # end_pymotw_header
  import re
  
  address = re.compile(
      r"""
  
      # The regular name
      (\w+)               # first name
      \s+
      (([\w.]+)\s+)?      # optional middle name or initial
      (\w+)               # last name
  
      \s+
  
      <
  
      # The address: first_name.last_name@domain.tld
      (?P<email>
        \1               # first name
        \.
        \4               # last name
        @
        ([\w\d.]+\.)+    # domain name prefix
        (com|org|edu)    # limit the allowed top-level domains
      )
  
      >
      """,
      re.VERBOSE | re.IGNORECASE,
  )
  
  candidates = [
      u"First Last <first.last@example.com>",
      u"Different Name <first.last@example.com>",
      u"First Middle Last <first.last@example.com>",
      u"First M. Last <first.last@example.com>",
  ]
  
  for candidate in candidates:
      print("Candidate:", candidate)
      match = address.search(candidate)
      if match:
          print("  Match name :", match.group(1), match.group(4))
          print("  Match email:", match.group(5))
      else:
          print("  No match")
  