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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:05:22