Замена регулярных выражений цветовых кодов 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], но мне не удается удалить коды, независимо от того, какое регулярное выражение я пытаюсь использовать.   -  person sprocket12    schedule 13.05.2012
comment
Преобразуйте строку L12HelloWorld в массив символов и опубликуйте содержимое каждого символа в шестнадцатеричном или десятичном формате, тогда я смогу вам помочь.   -  person raisyn    schedule 13.05.2012
comment
@youllknow Я пытался найти, что это за символ L, но отладчик не помогает, я пытался скопировать и вставить его в код С#, но это тоже не сработало. Лучшее, что я могу сделать, это доверять его /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

Попробуйте следующее, работает для вас образец приветствия мира

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

По сути, просто посмотрите, что такое char в ваших строках, и создайте свое регулярное выражение, чтобы соответствовать любому из них 3... задушить L char, который является регулярным выражением \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