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) )
kwd_part = '|'.join(keywords)
rx = re.compile(r'\b(?=({0}(?:\s+{0})*|{1}(?:\s+{1})*))\1(?!\s+(?:{2})\b)\s*'.format(dgt_part, num_wrd_part, kwd_part), re.I)
print(rx.pattern)
for element in text:
    print( rx.sub('',  element) )
    