You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于关键词从字符串中提取后续指定单词的技术实现需求

提取关键词后的第一个单词的两种实现方法

嘿,这个需求很常见,我给你准备了两种靠谱的解法,直接就能套用到你的场景里:

方法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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:30:57