Regex Замяна на Mirc цветни кодове

Правя малък/прост IRC клиент за специален случай на употреба. Бих искал да премахна цветните кодове на Mirc, които други потребители пишат от своите Mirc / други подобни клиенти.

Екранна снимка:

въведете описание на изображението тук

Опитвам се от около 1 час без успех:

string msg = string.Format("{0}\n", e.Data.Message);
//msg = Regex.Replace(msg, @"\x03(?:\d{1,2}(?:,\d{1,2})?)?", string.Empty); // Ive tried all sorts here.
txtActivity.AppendText(msg);

Моля за помощ, благодаря предварително.

РЕДАКТИРАНЕ:

това е HelloWorld в червено.

3
51
72
101
108
108
111
87
111
114
108
100
10

РЕДАКТИРАНЕ 2:

въведете описание на изображението тук

РЕДАКТИРАНЕ 3:

3
48
49
44
49
53
32
49
46
32
73
110
32
116
104
101
32
78
97
109
101
32
111
102
32
31
65
108
108
97
104
31
44
32
116
104
101
32
77
111
115
116
32
66
101
110
101
102
105
99
101
110
116
44
32
116
104
101
32
77
111
115
116
32
31
77
101
114
99
105
102
117
108
31
46
32
3
10

person sprocket12    schedule 12.05.2012    source източник
comment
Документи: mirc.com/colors.html   -  person dtb    schedule 13.05.2012
comment
@dtb да, прочетох това, той използва 3 ascii кода с формат ^CN[M], но не мога да успея да премахна кодовете, без значение какъв Regex опитвам.   -  person sprocket12    schedule 13.05.2012
comment
Направете низа L12HelloWorld да го преобразува в char-масив и публикувайте съдържанието на всеки char в шестнадесетичен или десетичен формат, тогава може да съм в състояние да ви помогна.   -  person raisyn    schedule 13.05.2012
comment
@youllknow Опитах се да намеря какво представлява този L char, но дебъгерът не помага там, опитах се да го копирам и поставя в кода на c#, но и това не проработи. Най-доброто, което мога да направя, е да се доверя на неговия /x03, както пише навсякъде. или /x02 за получер.   -  person sprocket12    schedule 13.05.2012
comment
Просто стартирайте: foreach(char c in s) Console.WriteLine((int)c); където s е вашият лош низ и публикувайте изхода   -  person raisyn    schedule 13.05.2012


Отговори (2)


Ако искате да премахнете ВСИЧКИ BURC кодове (удебелени, подчертани, обратни и цветни), можете също да използвате регулярен израз като следния:

msg = Regex.Replace(msg, @"[\x02\x1F\x0F\x16]|\x03(\d\d?(,\d\d?)?)?", String.Empty);
person Jarmex    schedule 12.05.2012
comment
Вашето решение почти проработи, моля, вижте редакция 2, началните цветове са изчезнали, но някои странни знаци все още се появяват в краищата. - person sprocket12; 13.05.2012
comment
Странно, моля, можете ли да публикувате шестнадесетичните/ascii стойностите на тези знаци, както направихте с оригинала? - person Jarmex; 13.05.2012
comment
Редактирах кода си, за да включва подчертаването (\x1F), тъй като го забравих в оригинала - person Jarmex; 13.05.2012
comment
Ах, да, това, което се случва в това, което публикувахте, е, че крайният начален цветен код (\x03) се използва за край на цвета на блока, вместо стандартния знак за "крайни контролни кодове" (\x0F). Актуализирах своя фрагмент, така че ще премахне и тези. - person Jarmex; 13.05.2012

Опитайте следното, работи за вас Hello World проба

s = new Regex(@"\x03(\d{1,2}(,\d{1,2})?)?").Replace(s, "");

По принцип просто вижте какви са символите във вашите низове и създайте своя регулярен израз, за ​​да съответства на който и да е от тях 3... удушете L знак, който е регулярен израз \x03 51... номер 3, който е в регулярен израз \d

@EDIT 3:
Кодът, който публикувах, дава:

" 1. In the Name of Allah, the Most Beneficent, the Most Merciful. \n"

Ако не искате празното пространство и новия ред, можете да използвате .Trim()

 s = new Regex(@"\x03(\d{1,2}(,\d{1,2})?)?").Replace(s, "").Trim();
person raisyn    schedule 12.05.2012