如何用正则触发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
相关产品推荐
相关产品推荐

