我正在使用irclib在Python中编写IRC bot,我正在尝试在某些频道上记录消息.
问题是一些mIRC用户和一些Bots使用颜色代码编写.
有关如何剥离这些部分并只留下明确的ascii文本消息的任何想法?
Sme*_*ity 13
在我看来,正则表达式是你最干净的赌注.如果您以前没有使用它们,这是一个很好的资源.有关Python正则表达式库的完整详细信息,请转到此处.
import re
regex = re.compile("\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)
Run Code Online (Sandbox Code Playgroud)
正则表达式搜索^ 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'
Run Code Online (Sandbox Code Playgroud)
混乱的解决方案是类似的,但最终可能最多吃两个数字,也不会删除任何可能挂起的松散^ C字符(例如关闭颜色命令的那个)
小智 7
第二级和以下建议是有缺陷的,因为它们在任何字符之后寻找数字,但不在颜色代码字符之后.
我对所有帖子进行了改进和组合,结果如下:
解:
regex = re.compile("\x1f|\x02|\x12|\x0f|\x16|\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)