$
означает «конец ввода» и не принадлежит этому регулярному выражению.
Вместо этого сделайте следующее:
m = re.search(r'>([^<]*)<', test_string)
if m:
print m.group(1)
При этом выполняется поиск >
, затем всех следующих символов, отличных от <
, а затем <
. Символы между >
и <
помечаются как группа, которую вы получаете, используя m.group(1)