2024-10-02 20:43:44 发布
网友
我正在使用irclib用Python编写一个IRC bot,并试图在某些频道上记录消息。 问题是一些mIRC用户和一些bot使用color codes编写 你知道我如何去掉这些部分,只留下清晰的ascii文本信息吗?
第二个等级和下面的建议是有缺陷的,因为它们查找任何字符后面的数字,而不是色码字符后面的数字。
我对所有职位进行了改进和合并,结果如下:
解决方案:
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去掉另一个粗体字符。
\x16
\x0f
第二个等级和下面的建议是有缺陷的,因为它们查找任何字符后面的数字,而不是色码字符后面的数字。
我对所有职位进行了改进和合并,结果如下:
解决方案:
regex = re.compile("\x1f|\x02|\x12|\x0f|\x16|\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)
在我看来,正则表达式是你最明智的选择。如果您以前没有使用过它们,this是一个很好的资源。有关Python的regex库的详细信息,请转到here。
regex搜索^C(在ASCII中是\x03,您可以通过在命令行上执行chr(3)进行确认),然后可选地查找一个或两个[0-9]字符,然后可选地后跟一个逗号,然后再查找另一个或两个[0-9]字符。
(?: ... )表示忘记存储括号中的内容(因为我们不需要反向引用它),?表示匹配0或1,{n,m}表示匹配前一组的n到m。最后,\d表示匹配[0-9]。
剩下的可以用我上面提到的链接解码。
混沌的解决方案类似,但最终可能会吃掉最多两个数字,也不会删除任何可能挂起的松散字符(例如关闭colour命令的字符)
当我发现这个问题有用时,我想我会做出贡献。
我在正则表达式中添加了一些内容
\x16
删除了“reverse”字符。\x0f
去掉另一个粗体字符。相关问题 更多 >
编程相关推荐