根据关键词从字符串中导出单词

时间:2018-04-13 13:15:56

标签: python

我有一个字符串(text_string),我想从中找到基于我所谓的key_words的单词。我想将结果存储在名为expected_output的列表中。

预期输出始终是关键字后面的单词(关键字和输出单词之间的空格数并不重要)。 expect_output字是所有字符,直到下一个空格。

请参阅以下示例:

text_string = "happy yes_no!?.  why coding      without      paus happy yes"
key_words = ["happy","coding"]

expected_output = ['yes_no!?.', 'without', 'yes']

expected_output explanation: 
yes_no!?.        (since it comes after happy. All signs are included until the next space.)
without          (since it comes after coding. the number of spaces surronding the word doesn't matter)
yes              (since it comes after happy)

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式解决它。像这样。

void print() { main->printTest(); }

解释

  1. (?:{0})获取您的import re expected_output = re.findall('(?:{0})\s+?([^\s]+)'.format('|'.join(key_words)), text_string) 列表,并创建一个包含此列表中所有字词的非捕获组。
  2. \ s +?添加一个惰性量词,这样它就可以在前一次出现之前得到所有空格,直到下一个不是空格的字符
  3. ([^ \ s] +)将在key_words之后立即捕获文字,直至找到下一个空格
  4. 注意:如果你在循环中运行了太多次,即你之前应该在正则表达式字符串上使用key_words以提高性能。

答案 1 :(得分:0)

我们将使用Python的re模块根据空格分割字符串。 然后,我们的想法是遍历每个单词,并查看该单词是否是关键字的一部分。如果是,我们将take_it设置为True,以便下次处理循环时,该单词将添加到taken,其中存储了您要查找的所有单词。

import re

def find_next_words(text, keywords):
  take_it = False
  taken = []
  for word in re.split(r'\s+', text):
    if take_it == True:
      taken.append(word)
    take_it = word in keywords
  return taken

print(find_next_words("happy yes_no!?.  why coding      without      paus happy yes", ["happy", "coding"]))

结果为['yes_no!?.', 'without', 'yes']