Il suffit de définir un booléen pour stocker le mot suivant si un mot clé a été trouvée:
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
est maintenant une liste de tous les mots qui il a été précédé par l'un des KEYWORDS
. J'ai fait l'hypothèse que si le dernier mot de la ligne précédente est un mot-clé, le premier mot de la ligne suivante ne doit pas être stocké. Si vous voulez ce comportement, déplacez store_next = False
en dehors de la boucle (externe) for
.
Ou vous pouvez utiliser un 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()))
Cela pourrait ressembler à la magie, mais cela est l'expression régulière réelle utilisée:
(?:tINT16|tUINT16|tGDT_TYPE) +(\w+)
Ce qui se traduit par: correspondre à un des les mots-clés suivis d'un ou plusieurs espaces suivis d'un mot. Au début, ?:
dit à Python de ne pas stocker ce groupe. \w
est équivalent à [a-zA-Z0-9_]
(en fonction des indicateurs LOCALE et UNICODE).
il semble que vous l'avez presque où êtes-vous Tu échoues? – monkut