Caesar Cipher written in Python
The Caesar function

First the parameter string should be renamed as it has the same name as the standard module string. Sure you don't use it, but it is a bad habit to get into and can result in problems later on. Regardless, since we're dealing with cryptography and sending messages and such, wouldn't a better word be message?

There is also no documentation. caesar is not a descriptive name if you don't already know what a Caesar cipher is. You should have a docstring that describes that this a Caesar cipher and at least link to Wikipedia for a description of the Caesar cipher if not describe it yourself.

The main function

store_true

if args.bruteforce:
    bruteforce = True
else:
    bruteforce = False
    shift = args.shift


The 'store_true' flag indicates that args.bruteforce is True when the flag is specified and False when it is not specified. Forget the bruteforce variable and just concern yourself with args.bruteforce.

store_const

There is also a store_const action that has the optional1 parameters const and default. Thus you can have const=re.compile('[^A-Z\s]') and default=re.compile('[^A-Z]'). This removes the need for:

if args.preserve_spacing: 
    regex = re.compile('[^A-Z\s]')
else:
    regex = re.compile('[^A-Z]')


1 The const parameter is a paradoxically optional argument that is required