This depends on what you mean by, 'test a string'. Do you want to check if the entire string matches your pattern, or if the pattern just happens to occur in your string, e.g. 'ESZ6' vs. "I've got an ESZ6 burning a hole in my pocket'. Can other characters abut your target, eg. '123ESZ6ARE'?
Assuming we're just testing individual tokens like 'ESZ6' and 'ESSP6', then here are some code ideas:
import re
items = ('ESZ6', 'ESSP6')
prog = re.compile(r"[A-Z]+[FGHJKMNQUVXZ]\d$")
matches = [item for item in items if prog.match(item)]
Use .match() instead of .search() unless you want an unanchored search. Drop the final '$' if you want the end unanchored. (If using Python 3.4 or later, and want an anchored search, you can probably drop the '$' and use .fullmatch instead of .match)
Pattern match operators only match one character sans repetition operators so you don't need the {1} indications. Use raw strings, r"\d", when dealing with patterns to keep Python from messing with your back slashes.
Your description and your examples don't match exactly so I'm making some assumptions here.
prog = re.compile(r'^[A-Z]+[FGHJKMNQUVXZ]\d$')