如何从字符串中提取指定列表内的短语并去除重复项
从字符串提取指定短语并去重的实现方案
需求说明
给定短语/单词列表 ["boy", "a guy", "tree", "girl"](结合示例输出推断,原需求列表可能遗漏"girl"),需从输入字符串中提取所有属于该列表的内容,并去除重复项,输出顺序不限。
实现思路
- 完整短语匹配:由于目标列表包含多词短语(如"a guy"),不能直接按空格拆分输入字符串,需用正则表达式实现完整短语匹配,避免拆分多词短语导致的匹配错误。
- 高效去重:利用集合的唯一性特性对匹配到的短语去重,因题目允许输出顺序不限,集合去重是简洁高效的方案。
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
相关产品推荐
相关产品推荐

