如何从字符串中提取匹配关键词列表中的单词后的单词
我刚开始学习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?
...
4 个回答
0
也许下面的代码就是你想要的。请注意,如果关键词出现在行的末尾,你需要做一些特别的处理。
newstring = ''
fread = open (F_FIXED_EERAM, 'r')
KEYWORDS = ['tINT16', 'tUINT16', 'tGDT_TYPE']
for line in fread.readlines():
words = line.split()
for i in range(0,len(words)-1):
if words[i] in KEYWORDS:
newstring += words[i+1]
1
你可以使用 enumerate(words)
,这样会得到以下结果:
for i, word in enumerate(words):
if word in KEYWORDS:
if(i+1<len(words)):
str.append(word[i+1])
或者你可以使用 re
这个库,详细信息可以查看 http://docs.python.org/library/re.html。在这里,你可以指定一个正则表达式,轻松地把特定的值直接解析到一个数组里。
3
只需要设置一个布尔值来存储下一个单词,如果找到了关键字的话:
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
循环外面。
或者你可以使用一个 正则表达式
:
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_]
(具体取决于地区和 Unicode 标志)。