Control the input of the user according to a sample string and get some info from it
Bug

The regex is flawed, consider this:

&gt;&gt;&gt; print(re.match(pat, 'show me the multiplication table of  from  to '))
&gt;&gt;&gt; &lt;re.Match object; span=(0, 46), match='show me the multiplication table of  from  to '&gt;


That is because [0-9]* matches the digit zero, or more times

I suggest to change them with + which will match the digit 1, or more times

pattern = re.compile('(?i)^show me the multiplication table of \d+ from \d+ to \d+$')


Codestyle


StringController() seems overly complex

Basically the same can be achieved with re.match(pattern, input_string)

It adds a layer of complexity what is not needed, I would just remove the entire class
The extraction of numbers can be greatly simplified

You could use re.findall(r'(\d+)', input) to find the digits in a neater way

And you could map(int, iterable) to convert them to integers


Alternative

INPUT_REGEX = re.compile('(?i)^show me the multiplication table of \d+ from \d+ to \d+$')

def make_table(user_input):
    step, min_range, max_range = map(int, re.findall('(\d+)', user_input))
    return "\n".join(str(step * t) for t in range(min_range, max_range))

def main():
    while True:
        user_input = input('Example string: show me the multiplication table of 8 from 3 to 8\nInput: ')
        print('-'*50)
        if user_input.lower() in ('q', 'quit', 'exit'):
            exit()
        elif re.match(INPUT_REGEX, user_input):
            print(make_table(user_input))
        else:
            print('Use the provided string')

if __name__ == '__main__':
    main()


Note I added a quit, might be nice for your user to let them exit in a clean way ;)