Eval is evil: Dynamic method calls from named regex groups in Python 3
Since you're converting user input into your own inner representation before evaluating, this is lesser evil. And sometimes this is the right tool for the job (inspect and pdb make good use of it).

But here, I'd go with simple dictionaries. It allows for automatically building the regexp and you don't really need the name of the capturing group since the dictionary already maps that information:

# Maps allowed characters to actual dice
DIE = {
    's': setback_dice,
    'd': difficulty_dice,
    'a': ability_dice,
    'p': proficiency_dice,
}

# Build the rules to parse user input
REX = ''.join(r'(\d{})?'.format(t) for t in DIE)

to_roll = re.match(REX, dice).groups()
for group in filter(None, to_roll):
    count, type_ = group
    DIE[type_].draw(int(count))


Note the use of filter to "not care about the Nones" and the uppercase variable names for constants.

Also:


you might want to wrap your code into functions to ease reusability and testing;
you might want to use re.compile to improve efficiency;
you might want to come up with a better regexp as this one is very dependant on the order it is written.