【问题标题】:How to update a Python string in a for loop?如何在 for 循环中更新 Python 字符串?
【发布时间】:2022-01-10 05:47:45
【问题描述】:

我正在使用 discord.py 库构建一个 Discord 机器人。该库使用on_message(ctx) 事件让我们根据需要修改消息。我想做的是删除格式并将用户提及的内容替换为 Discord 名称。消息的文本如下所示:

<@!34565734654367046435>  <@!34565734645354367046435> are you here?

ctx 变量中,我可以从ctx.mentions 中获得User 对象的提及,并且我可以获得每个提及用户的NAMEID .

我想将&lt;@!34565734654367046435&gt; 替换为用户名。结果是这样的:

Name1 Name2 are you here?

这是我目前所拥有的,但它似乎不起作用。

remove_formatting = utils.remove_markdown(context.content)
print(remove_formatting) # prints the very first code styled line in this question
for member in context.mentions:
   remove_formatting.replace(f'<@!{member.id}>', member.name)

如果我打印member.idmember.name 而不做任何其他事情,我会得到预期值。如何更新这个 for 循环中的字符串?

【问题讨论】:

  • 你得到的实际结果是什么?在进行替换之前,您是否打印了remove_formatting 以确保它符合您的预期?
  • 是的,它是第一个代码样式行: 你在这里吗?

标签: python string discord discord.py


【解决方案1】:

replace 函数返回一个新字符串,它不会就地编辑现有字符串。如果您将循环编辑为:

remove_formatting = utils.remove_markdown(context.content)
for member in context.mentions:
   remove_formatting = remove_formatting.replace(f'<@!{member.id}>', member.name)

它应该可以工作。

【讨论】:

  • 是的,它确实有效。它几乎与 PHP 相同 :) 谢谢
  • 是的,我需要一些时间才能做到
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2020-06-29
  • 2021-10-11
  • 2021-02-07
相关资源
最近更新 更多