Просто установите логическое значение для хранения следующего слова, если ключевое слово было найдено:
KEYWORDS = ['tINT16', 'tUINT16', 'tGDT_TYPE']
result = []
with open (F_FIXED_EERAM, 'r') as fread:
for line in fread:
store_next = False
words = line.split()
for word in words:
if store_next:
result.append(word)
store_next = False
elif word in KEYWORDS:
store_next = True
result
теперь представляет собой список всех слов, которым предшествует одно из KEYWORDS
.
Я сделал предположение, что если последнее слово предыдущей строки является ключевым словом, то первое слово в следующей строке не нужно хранить.Если вы хотите, чтобы это поведение двигалось store_next = False
за пределы (внешнего) цикла for
.
Или вы можете использовать regular expression
:
import re
KEYWORDS = ['tINT16', 'tUINT16', 'tGDT_TYPE']
regex = '(?:{}) +(\\w+)'.format('|'.join(map(re.escape, KEYWORDS)))
with open ('in.txt', 'r') as file_:
print(re.findall(regex, file_.read()))
Это может выглядеть как магия, но используется фактическое регулярное выражение:
(?:tINT16|tUINT16|tGDT_TYPE) +(\w+)
Что означает: соответствует одному из ключевых слов, за которым следует один или несколько пробелов, за которыми следует слово.?:
в начале говорит Python не хранить эту группу.\w
эквивалентно [a-zA-Z0-9_]
(в зависимости от флагов LOCALE и UNICODE).