我是Python新手。我可以将文件的一行分成单词,但还没有找到如何获取与一组关键字匹配的单词。
fread = open (F_FIXED_EERAM, 'r')
KEYWORDS = ['tINT16', 'tUINT16', 'tGDT_TYPE']
for line in fread.readlines():
words = line.split()
for word in words:
if word in KEYWORDS:
# I want to append the word after the keyword to a new string in another file
# How do I get at that word?
...
最佳答案
如果找到关键字,只需设置一个 bool 值来存储下一个单词:
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
结果
现在是前面带有关键字
之一的所有单词的列表。
我假设如果前一行的最后一个单词是关键字,则不必存储下一行的第一个单词。如果您确实希望此行为,请将 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 标志)。
关于python - 如何提取字符串中与关键字列表中的某个单词匹配的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981324/