Я бы решил немного иначе.
import re
test1 = """include tests
SIMULATION
SIMULATION_TYPE SUBSURFACE
PROCESS_MODELS
SUBSURFACE_FLOW Flow
MODE BLACK_OIL
OPTIONS
ANALYTICAL_JACOBIAN
ISOTHERMAL
/
/ ! end of subsurface_flow
/ ! end of process models
CHECKPOINT
/A
END !! end simulation block
SUBSURFACE
external_file example1.dat
include example2.dat"""
test2 = """external_file example3.dat
include example4.dat"""
token = re.findall(r'\S+', test1)
token
>>>['include',
'tests',
'SIMULATION',
'SIMULATION_TYPE',
'SUBSURFACE',
'PROCESS_MODELS',
'SUBSURFACE_FLOW',
'Flow',
'MODE',
'BLACK_OIL',
'OPTIONS',
'ANALYTICAL_JACOBIAN',
'ISOTHERMAL',
'/',
'/',
'!',
'end',
'of',
'subsurface_flow',
'/',
'!',
'end',
'of',
'process',
'models',
'CHECKPOINT',
'/',
'END',
'!!',
'end',
'simulation',
'block',
'SUBSURFACE',
'external_file',
'example1.dat',
'include',
'example2.dat']
Когда вы пометите свои слова токсинами, я соберу би-граммы
bi_grams = [(a,b) for a,b in zip(token[:-1], token[1:]) ]
и затем отфильтруйте те биграммы, которые содержат ваши файловые токены, в качестве первой записи
file_tokens = ('DATABASE', 'EXTERNAL_FILE', 'FILE', 'FILENAME', 'INCLUDE')
bi_grams_of_interest = [bi_gram for bi_gram in bi_grams if bi_gram[0].upper() in file_tokens]
bi_grams_of_interest
>>>[('include', 'tests'),
('external_file', 'example1.dat'),
('include', 'example2.dat')]
если вы запустите это для test2, я получу следующий вывод
>>>[('external_file', 'example3.dat'), ('include', 'example4.dat')]