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

如何用正则触发CallBackQueryHandler并检测回调查询前缀为classes_

解决Telegram机器人回调查询开头检测问题

你写的代码里有个明显的调用错误:把startswith方法对象直接和c.data做比较了,根本没触发方法执行。下面给你两种正确的实现方式:

方法一:使用Python内置startswith函数(推荐,简洁高效)

直接调用字符串的startswith方法判断前缀,同时加非空判断避免c.data为None时报错:

@bot.callback_query_handler(func=lambda c: c.data and c.data.startswith('classes_'))
def callback_is_return(call: types.CallbackQuery):
    print('Found!')
    # 后续解析示例:提取classes_后面的内容
    # class_info = call.data.split('_')[1]

方法二:使用正则表达式(适合复杂匹配场景)

如果需要匹配更复杂的前缀规则(比如前缀后带特定格式参数),可以用正则match方法(专门匹配字符串开头):

import re

@bot.callback_query_handler(func=lambda c: c.data and re.match(r'^classes_', c.data))
def callback_is_return(call: types.CallbackQuery):
    print('Found!')
    # 正则分组提取示例:若格式为classes_123,提取数字部分
    # match_result = re.match(r'^classes_(\d+)', call.data)
    # if match_result:
    #     class_id = match_result.group(1)

关键注意点

  • c.data and ...必须加,防止回调数据为空时调用方法抛出异常
  • startswith性能优于正则,适合简单前缀匹配
  • 正则适合需要同时提取参数的复杂场景

内容的提问来源于stack exchange,提问作者Collin Budrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:45:58