Your code works, except that it does not remove a sufficient amount of spaces and that compilation is rather useless if you only use it once:
>>> string = "You get #{turns} guesses."
>>> string = re.sub(re.compile('#{.*?}'),"",string)
>>> string
'You get guesses.'
So you probably want to compile the regex once, and then use it, and you better alter it to - for instance - remove tailing spaces:
rgx = re.compile('#{.*?}\s*')
string = rgx.sub('',string)
Note the \s* which will match with an arbitrary amount of spaces after the tag, and thus remove these as well:
>>> string = "You get #{turns} guesses."
>>> rgx = re.compile('#{.*?}\s*')
>>> string = rgx.sub('',string)
>>> string
'You get guesses.'
In case it is one word between the curly brackets ({}), you better use \w to exclude spaces:
rgx = re.compile('#{\w*}\s*')
string = string.replace("#{turns} ","")?