python - 如何提取字符串中与关键字列表中的某个单词匹配的单词

标签 python string split

我是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/

相关文章:

python - 识别 Pandas 中的非连续行

python - 抓取新闻(Python 3.6,BeautifulSoup)

python 扭曲 : Is it possible to reload certificates on the fly?

c - 在 C 中使用 char 数组

r - 拆分字符串列以创建新的二进制列

python - 使用异常处理解释 generator.close()

java - 使用 for 循环打印字母表。为什么我必须显式地将字符 [] 转换为字符串?

javascript - 解析 json 字符串的最快方法(没有 jquery)

c - 释放在另一个循环中调用的函数中分配的内存

arrays - 如何以自由格式 RPGLE 将一个字符的多个位置存储在数组中的字符串中?