import re

text=['one two three basic', '1 2 3 basic', '1st 2nd 3rd basic',
      'one two three very basic', '1 2 3 very basic', '1st 2nd 3rd very basic']
num_list=['one','two','three']
keywords = ['basic','main','foundations']
dgt_part = r'\d+(?:st|[rn]d|th)?'
num_wrd_part = '(?:{})'.format( '|'.join(num_list) )

rx = re.compile(r'\b((?:{0}(?:\s+{0})*|{1}(?:\s+{1})*)\s+(?:{2})\b)|\b(?:{0}(?:\s+{0})*|{1}(?:\s+{1})*)'.format(dgt_part, num_wrd_part, '|'.join(keywords)), re.I)
print(rx.pattern)
for element in text:
    print( rx.sub(lambda x: x.group(1) or '',  element).strip() )
    