我有一个字符串(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)
答案 0 :(得分:0)
您可以使用正则表达式解决它。像这样。
void print() { main->printTest(); }
import re
expected_output = re.findall('(?:{0})\s+?([^\s]+)'.format('|'.join(key_words)), text_string)
列表,并创建一个包含此列表中所有字词的非捕获组。key_words
之后立即捕获文字,直至找到下一个空格 注意:如果你在循环中运行了太多次,即你之前应该在正则表达式字符串上使用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']