过滤ANSI颜色代码

博客提到因效率低使用Regex.Replace()处理数据,代码为Data2 = Regex.Replace(Data,@\\\[[\\d]{1,2}(;[\\d]{1,2}){0,2}m\\\)。还表示后续要研究Trigger,因Zmud用的非标准Regex,需写算法转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            byte[] buffer=new byte[Client.ReceiveBufferSize];
            
this.isActive = true;
            
while (Client.GetStream().Read(buffer,0,buffer.Length) != 0)
            {
                string Data
=System.Text.Encoding.Default.GetString(buffer);
                
int i=0;  //0为有效,1为1b后面的字符,2为无效
                string Data2="";
直接获取缓冲转换成string 会获得一些意外的惊喜
[2;37;0m
这就是ansi的颜色代码,

"["的ascii分别为 16进制1B、10进制27  和16进制5b、10进制91

原来的想法是遍历每个字符,过滤掉ansi

//                foreach(char c in Data.ToCharArray())
//                {
//                    if(c==(char)27)   // 1Bh 27o ''
//                    {
//                        i=1;
//                        continue;
//                    }
//                    if(i==1&&c==(char)91)    //5bh 91o ''
//                    {
//                        i=2;
//                        continue;
//                    }
//                    if(i==2)
//                        if(c==(char)109)        //36h 109o 'm'
//                        {
//                            i=0;
//                            continue;
//                        }
//                        else 
//                            continue;
//                    Data2=Data2+c;
//                }

可是效率低得受不了,于是想到Regex.Replace()

    Data2 = Regex.Replace(Data,@"\[[\d]{1,2}(;[\d]{1,2}){0,2}m","");

 果然不一般。

最近还得研究研究Trigger,用Regex应该很容易,不过Zmud用的不是标准Regex,还要写个好算法转换

Just so so

转载于:https://www.cnblogs.com/pblee/archive/2005/12/15/297827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值