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

如何从字符串中提取指定列表内的短语并去除重复项

从字符串提取指定短语并去重的实现方案

需求说明

给定短语/单词列表 ["boy", "a guy", "tree", "girl"](结合示例输出推断,原需求列表可能遗漏"girl"),需从输入字符串中提取所有属于该列表的内容,并去除重复项,输出顺序不限。

实现思路

  1. 完整短语匹配:由于目标列表包含多词短语(如"a guy"),不能直接按空格拆分输入字符串,需用正则表达式实现完整短语匹配,避免拆分多词短语导致的匹配错误。
  2. 高效去重:利用集合的唯一性特性对匹配到的短语去重,因题目允许输出顺序不限,集合去重是简洁高效的方案。

Python代码实现

import re

def extract_unique_target_phrases(input_string, target_phrases):
    # 构建正则匹配模式,转义特殊字符并匹配完整短语边界
    phrase_pattern = re.compile(
        r'\b(' + '|'.join(re.escape(phrase) for phrase in target_phrases) + r')\b'
    )
    # 查找所有匹配的短语
    matched_phrases = phrase_pattern.findall(input_string)
    # 去重后返回结果
    return list(set(matched_phrases))

# 定义目标短语列表
target_list = ["boy", "a guy", "tree", "girl"]

# 测试示例
test_inputs = [
    "boy girl a tree a guy and a boy",
    "boy boy boy boy boy",
    "girl boy girl boy a guy",
    "a guy girl very handsome girl tricky question"
]

# 执行测试并输出结果
for input_str in test_inputs:
    result = extract_unique_target_phrases(input_str, target_list)
    print(' '.join(result))

测试结果

  • 输入:boy girl a tree a guy and a boy → 输出:boy tree a guy girl(顺序不限)
  • 输入:boy boy boy boy boy → 输出:boy
  • 输入:girl boy girl boy a guy → 输出:girl boy a guy(顺序不限)
  • 输入:a guy girl very handsome girl tricky question → 输出:a guy girl(顺序不限)

代码说明

  • re.escape():处理目标短语中的特殊字符,避免干扰正则匹配逻辑。
  • \b:匹配单词边界,确保只匹配完整的目标短语(例如不会误匹配"boyish"中的"boy")。
  • 若需保留短语首次出现的顺序,可将集合去重替换为list(dict.fromkeys(matched_phrases))。

内容的提问来源于stack exchange,提问作者Gabriel Yeung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:45:34