I saw multiple problems/doubts with your pattern, so I just rewrote it from the start as this:
(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2}(?:th|st|nd|rd),\s+\d{4}
Here is an explanation of the pattern:
(?:Jan|Feb|...|Dec) match, but do not capture, the abbreviated month name
\s+ one or more spaces
\d{1,2} day as one or two digits
(?:th|st|nd|rd) match, but do not capture, day quantifier
\s+ one or more spaces
\d{4} match a four digit year
Full code:
my_str = 'Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009'
match = re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2}(?:th|st|nd|rd),\s+\d{4}', my_str)
for item in match:
print(item)