我正在尝试使用discord.utils.escape\u提及来删除message.content中的提及。长话短说,我注意到它不像我预期的那样工作。
var = discord.utils.escape_mentions("test @!334765815435886592 test")
print(var)
将源字符串作为输出打印给我
试验@!334765815435886592测试
不过,这里是你提到的逃逸定义
return re.sub(r'@(everyone|here|[!&]?[0-9]{17,20})', '@\u200b\\1', text)
如果我复制它并用空字符串替换'@\u200b\1',所有的工作都很好,我得到了很好的结果
试验
有人能给我解释一下这种行为,以及我怎样才能完成这个功能吗?
1条答案
按热度按时间lo8azlld1#
我相信你误解了你所说的真正意义。看起来您希望它将@[0-9]+替换为一个空字符串,但实际上它没有这样做。
re.sub
接受3个参数——一个模式、替换它的文本(某种意义上)和操作的文本。看看这个:如你所见,我明白了
<@\u200b700796664276844612>
作为我的输出。有趣的是,如果我把它打印出来,我会得到这个:注意它看起来和我的原文一样。原因是
\u200b
实际上是一个零宽度的空间,打印时是看不见的。所以,实际上,escape\u提到在
@
所以在不和谐的情况下,它不会被提及,而仅仅是文本。