Python如何实现文本中带*通配符的前缀单词匹配
带*后缀通配符的文本关键词匹配实现
核心规则
- 输入为存储关键词的CSV文件、待匹配目标文本
- 匹配逻辑:
- 关键词末尾不带
*:精确匹配对应完整单词 - 关键词末尾带
*通配符:匹配所有以*前字符串为前缀的完整单词
- 关键词末尾不带
- 示例场景:关键词为
["random*"]时,需要提取样本文本中所有以random为前缀的单词,包括randomized、randomization
示例输入
text = "1 who were randomized 1 1 to daro 600 mg twice daily or matching pbo in addition to adt docetaxel randomization was stratifi ed by extent of disease according to tnm m1a vs m1b vs m1c and alkaline phosphatase levels vs ≥ upper limit of normal the primary endpoint was os secondary efficac y endpoints included time to crpc time to pain progression time to first symptomatic skeletal event sse and time to initiation of subsequent systemic antineoplasti c therapies safety was also assessed resu from nov 2016 to june 2018 1306 pts were randomized 651 to daro" keyword = ["random*"]
可直接运行的Python实现
import csv import re def load_keywords(csv_path: str) -> list: """从CSV文件读取关键词,默认关键词存放在CSV第一列""" keywords = [] with open(csv_path, 'r', encoding='utf-8') as f: csv_reader = csv.reader(f) for row in csv_reader: if row and row[0].strip(): keywords.append(row[0].strip()) return keywords def match_target_words(text: str, keywords: list, case_sensitive: bool = False) -> list: """ 按规则匹配文本中的关键词 :param text: 待匹配目标文本 :param keywords: 关键词列表 :param case_sensitive: 是否区分大小写,默认不区分 :return: 去重后的匹配结果列表 """ match_result = set() # 预处理文本:提取所有独立英文单词,自动过滤数字、符号、换行干扰 if not case_sensitive: text = text.lower() word_list = re.findall(r'\b[a-zA-Z]+\b', text) for kw in keywords: if not case_sensitive: kw = kw.lower() kw = kw.strip() if kw.endswith('*'): # 处理前缀通配规则 prefix = kw[:-1] for word in word_list: if word.startswith(prefix): match_result.add(word) else: # 普通关键词精确匹配 if kw in word_list: match_result.add(kw) return list(match_result) # 样例测试 if __name__ == "__main__": test_result = match_target_words(text, keyword) print(test_result) # 样例输出: ['randomized', 'randomization']
实现说明
- 单词提取用正则边界匹配实现,自动过滤文本里的数字、特殊符号、换行拆分的干扰,不会把非单词内容纳入匹配范围
- 前缀匹配直接用字符串原生
startswith方法实现,比拼接复杂正则的执行效率更高,大文本场景下速度优势明显 - 结果用集合存储自动去重,避免同一单词在文本中多次出现导致重复返回
- 支持配置是否区分大小写,默认不区分,适配绝大多数医学、学术文本匹配场景
- 自带CSV读取逻辑,直接传入关键词CSV的文件路径即可完成关键词加载,不需要额外做格式清洗
内容的提问来源于stack exchange,提问作者Ad_sh
相关产品推荐
相关产品推荐

