基于关键词从字符串中提取后续指定单词的技术实现需求
提取关键词后的第一个单词的两种实现方法
嘿,这个需求很常见,我给你准备了两种靠谱的解法,直接就能套用到你的场景里:
方法1:正则表达式(推荐,简洁高效)
正则表达式天生适合处理这种带任意空格的匹配场景,能精准捕获关键词后的目标单词:
import re text_string = "happy yes_no!?. why coding without paus happy yes" key_words = ["happy", "coding"] # 为每个关键词转义,避免特殊字符干扰匹配 escaped_keys = [re.escape(key) for key in key_words] # 构建正则模式:匹配关键词 + 任意数量空白 + 非空白字符(目标单词) pattern = re.compile(r'(' + '|'.join(escaped_keys) + r')\s+(\S+)') # 提取所有匹配到的目标单词 expected_output = [match.group(2) for match in pattern.finditer(text_string)] print(expected_output) # 输出: ["yes_no!?.", "without"]
代码解释:
re.escape(key):处理关键词里可能含有的正则特殊字符(比如如果关键词是c+ding,转义后才不会出错)\s+:匹配关键词和目标单词之间的任意数量空白(不管是1个还是多个空格、制表符都能覆盖)\S+:匹配到下一个空白前的所有非空白字符,也就是你要的目标单词finditer:遍历所有匹配结果,提取每个匹配的第二个捕获组(也就是目标单词)
方法2:分割字符串遍历(直观易懂,适合新手)
如果不想用正则,也可以把字符串分割成单词列表,然后逐个检查关键词,取后面的单词:
text_string = "happy yes_no!?. why coding without paus happy yes" key_words = ["happy", "coding"] # 按空白分割成单词列表(自动忽略多个空格) words = text_string.split() expected_output = [] # 遍历单词列表,注意不要越界(所以i最多到len(words)-2) for i in range(len(words) - 1): if words[i] in key_words: expected_output.append(words[i+1]) print(expected_output) # 输出: ["yes_no!?.", "without"]
代码解释:
split():默认按任意空白分割字符串,直接得到干净的单词列表- 遍历的时候只到
len(words)-2,避免最后一个单词是关键词时索引越界 - 检查当前单词是否在关键词列表里,如果是,就把下一个单词加入结果列表
两种方法都能完美满足你的需求,正则更适合复杂文本场景,分割遍历则更直观好理解~
内容的提问来源于stack exchange,提问作者Filip Eriksson
相关产品推荐
相关产品推荐

