*Block keywords*: not really YAGNI, because if we don't block them it becomes more difficult later

*Regex*: Yes, but you don't need to do anything weird re the `$`:

    ban_words = ('words', 'to', 'ban', ...)
    ban_regex = re.compile(r'^(%s)$' % ('|'.join(ban_words)))

(use compile for faster matching, otherwise your code will recompile the regex each time)

    >>> ban_words = ('words', 'to', 'ban')
    >>> r'^(%s)$' % ('|'.join(ban_words))
    '^(words|to|ban)$'