【问题标题】:Regex Replace of Mirc Colour CodesMirc 颜色代码的正则表达式替换
【发布时间】:2012-05-12 22:00:04
【问题描述】:

我正在制作一个小型/简单的 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

【问题讨论】:

  • @dtb 是的,我读到了,它使用 3 ascii 代码,格式为 ^CN[M] 但无论我尝试什么正则表达式,我都无法删除代码。
  • 将字符串 L12HelloWorld 转换为 char-array 并以十六进制或十进制格式发布每个字符的内容,然后我可能可以帮助您。
  • @youllknow 我试图找到那个 L char 是什么,但调试器在那里没有帮助,我试图将它复制并粘贴到 c# 代码中,但这也不起作用。我能做的最好的就是相信它的/x03,就像它到处说的那样。或 /x02 为粗体。
  • 只需运行:foreach(char c in s) Console.WriteLine((int)c);其中 s 是您的错误字符串并发布输出

标签: c# regex replace irc mirc


【解决方案1】:

如果您想去除所有 BURC 代码(粗体、下划线、反向和颜色),您还可以使用如下正则表达式:

msg = Regex.Replace(msg, @"[\x02\x1F\x0F\x16]|\x03(\d\d?(,\d\d?)?)?", String.Empty);

【讨论】:

  • 你的解决方案几乎成功了,请看编辑2,开始的颜色消失了,但一些奇怪的字符仍然出现在结尾。
  • 奇怪,你能像原来一样发布这些字符的 hex/ascii 值吗?
  • 我已经编辑了我的代码以包含下划线 (\x1F),因为我在原始代码中忘记了它
  • 啊,是的,您发布的内容是使用最终的打开颜色代码 (\x03) 来结束块颜色,而不是标准的“结束控制代码”字符 (\x0F) .我已经更新了我的 sn-p,所以它也会删除这些。
【解决方案2】:

试试以下,你好,世界示例

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

基本上只要看看你的字符串中的字符是什么,然后构建你的正则表达式来匹配它们中的任何一个 3...扼杀 L char 正则表达式 \x03 51... 正则表达式中的数字 3 \d

@编辑 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多