我正在使用irclib用Python写一个IRC机器人,并且试图在某些 channel 上记录消息。
问题是一些mIRC用户和一些Bot使用color codes编写。
关于如何剥离这些部分并仅留下清晰的ascii文本消息的任何想法吗?
最佳答案
我认为,正则表达式是最干净的选择。如果您以前从未使用过它们,this是一个很好的资源。有关Python的正则表达式库的完整详细信息,请访问here。
import re
regex = re.compile("\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)
正则表达式搜索^ 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'
困惑的解决方案是相似的,但是最终可能会吃掉最多两个数字,并且也不会删除任何可能悬而未决的松散^ C字符(例如,关闭color命令的那个字符)