Python实现:根据水果关键词反向匹配对应姓名
Python实现根据水果关键词提取对应姓名
方法一:逐行处理(无需正则,简单直观)
这种方法适合格式固定的场景,直接按行检查目标水果,再提取姓名:
def get_names_by_fruit(file_path, target_fruit): names = [] with open(file_path, 'r', encoding='utf-8') as f: for line in f: # 检查当前行是否包含目标水果(如需忽略大小写,可改为if target_fruit.lower() in line.lower()) if f'FRUIT: {target_fruit}' in line: # 定位姓名位置:从"Name: "后到"|"前的内容 name_start = line.find('Name: ') + 6 # "Name: "长度为6 name_end = line.find('|') name = line[name_start:name_end].strip() names.append(name) return names # 使用示例 # 替换成你的文件路径 apple_names = get_names_by_fruit('user_records.txt', 'APPLE') print(apple_names) # 输出: ['John', 'James'] pear_names = get_names_by_fruit('user_records.txt', 'PEAR') print(pear_names) # 输出: ['Mike']
方法二:正则表达式匹配(灵活通用)
如果记录格式可能有变动(比如跨行),用正则可以更精准匹配每条记录:
import re def get_names_by_fruit_regex(file_path, target_fruit): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 正则规则:捕获Name后的姓名,且对应FRUIT为目标值的记录 # re.escape避免目标水果含特殊字符时出错,re.DOTALL让.匹配换行符 pattern = re.compile(r'Name: (\w+)\|.*?FRUIT: ' + re.escape(target_fruit), re.DOTALL) return pattern.findall(content) # 使用示例 apple_names = get_names_by_fruit_regex('user_records.txt', 'APPLE') print(apple_names) # 输出: ['John', 'James']
补充说明
- 逐行处理的优点是代码易懂,不需要正则基础;正则法则更适合复杂格式的文本。
- 如果姓名包含空格或特殊字符,可以把正则里的
\w+改成[^|]+(匹配到|之前的所有字符),比如r'Name: ([^|]+)\|.*?FRUIT: '。
内容的提问来源于stack exchange,提问作者spret
相关产品推荐
相关产品推荐

