如何去除mIRC用户使用的色码?

2024-10-02 20:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用irclib用Python编写一个IRC bot,并试图在某些频道上记录消息。
问题是一些mIRC用户和一些bot使用color codes编写 你知道我如何去掉这些部分,只留下清晰的ascii文本信息吗?


Tags: 用户文本信息消息ircbot记录ascii
3条回答

第二个等级和下面的建议是有缺陷的,因为它们查找任何字符后面的数字,而不是色码字符后面的数字。

我对所有职位进行了改进和合并,结果如下:

  • 我们把相反的字符去掉
  • 删除颜色代码而不在文本中留下数字。

解决方案:

regex = re.compile("\x1f|\x02|\x12|\x0f|\x16|\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)

在我看来,正则表达式是你最明智的选择。如果您以前没有使用过它们,this是一个很好的资源。有关Python的regex库的详细信息,请转到here

import re
regex = re.compile("\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)

regex搜索^C(在ASCII中是\x03,您可以通过在命令行上执行chr(3)进行确认),然后可选地查找一个或两个[0-9]字符,然后可选地后跟一个逗号,然后再查找另一个或两个[0-9]字符。

(?: ... )表示忘记存储括号中的内容(因为我们不需要反向引用它),表示匹配0或1,{n,m}表示匹配前一组的n到m。最后,\d表示匹配[0-9]。

剩下的可以用我上面提到的链接解码。

>>> regex.sub("", "blabla \x035,12to be colored text and background\x03 blabla")
'blabla to be colored text and background blabla'

混沌的解决方案类似,但最终可能会吃掉最多两个数字,也不会删除任何可能挂起的松散字符(例如关闭colour命令的字符)

当我发现这个问题有用时,我想我会做出贡献。

我在正则表达式中添加了一些内容

regex = re.compile("\x1f|\x02|\x03|\x16|\x0f(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)

\x16删除了“reverse”字符。\x0f去掉另一个粗体字符。

相关问题 更多 >