如何实现类Discord的@提及功能:提取@后至空格/下划线的单词
实现Discord式@提及检测功能
问题分析
你当前的代码仅截取了@符号前的内容,完全未处理@后的目标单词,这是无法实现需求的核心问题。我们需要准确提取@后到空格/下划线为止的单词,并验证其是否在指定列表中。
解决方案代码
import re # 指定允许提及的用户/角色列表 allowed_mentions = ["everyone", "alice", "bob", "charlie"] user_input = input("input: ") # 匹配@后到空格或下划线为止的单词 # 正则规则解释:@匹配符号本身,([^\s_]+)捕获非空格、非下划线的连续字符 mentions = re.findall(r'@([^\s_]+)', user_input) # 逐一检查提及合法性 for mention in mentions: if mention in allowed_mentions: print(f"合法提及: @{mention}") else: print(f"非法提及: @{mention}(不在允许列表中)")
代码说明
- 正则匹配:
r'@([^\s_]+)'精准锁定@开头的内容,自动在遇到空格或下划线时停止提取,确保拿到完整的目标提及单词。 - 多提及支持:
re.findall会一次性提取输入中所有符合规则的@内容,比如输入@alice 通知@everyone会同时提取alice和everyone。 - 合法性校验:遍历提取结果,与指定列表对比后输出明确的校验结果。
测试示例
输入:@alice 帮我叫下@everyone_还有@david
输出:
合法提及: @alice 合法提及: @everyone 非法提及: @david(不在允许列表中)
内容的提问来源于stack exchange,提问作者Merlon
相关产品推荐
相关产品推荐

