3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
答案很簡(jiǎn)單,并且適用于至少數(shù)千個(gè)字符的字符串。
范例1:
Regex rx = new Regex( @"\\[uU]([0-9A-F]{4})" );
result = rx.Replace( result, match => ((char) Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber)).ToString() );
范例2:
Regex rx = new Regex( @"\\[uU]([0-9A-F]{4})" );
result = rx.Replace( result, delegate (Match match) { return ((char) Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber)).ToString(); } );
第一個(gè)示例顯示了使用lambda表達(dá)式(C#3.0)進(jìn)行的替換,第二個(gè)示例使用了應(yīng)與C#2.0一起使用的委托。
為了分解這里發(fā)生的事情,首先我們創(chuàng)建一個(gè)正則表達(dá)式:
new Regex( @"\\[uU]([0-9A-F]{4})" );
然后,我們使用字符串'result'和一個(gè)匿名方法(在第一個(gè)示例中為lambda表達(dá)式,在第二個(gè)示例中為委托-委托也可以是正則方法)調(diào)用Replace(),該方法將轉(zhuǎn)換在字符串中找到的每個(gè)正則表達(dá)式。
Unicode轉(zhuǎn)義的處理方式如下:
((char) Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber)).ToString(); });
獲取表示轉(zhuǎn)義的數(shù)字部分的字符串(跳過(guò)前兩個(gè)字符)。
match.Value.Substring(2)
使用Int32.Parse()解析該字符串,該字符串采用Parse()函數(shù)應(yīng)該期望的字符串和數(shù)字格式,在這種情況下為十六進(jìn)制數(shù)字。
NumberStyles.HexNumber
然后,我們將結(jié)果數(shù)字轉(zhuǎn)換為Unicode字符:
(char)
最后,我們?cè)赨nicode字符上調(diào)用ToString(),它為我們提供了其字符串表示形式,該字符串表示形式是傳遞回Replace()的值:
.ToString()
注意:可以使用match參數(shù)的GroupCollection和正則表達(dá)式中的子表達(dá)式來(lái)捕獲數(shù)字(而不是使用Substring調(diào)用來(lái)捕獲要轉(zhuǎn)換的文本),以?xún)H捕獲數(shù)字('2320'),但這更加復(fù)雜且可讀性較差。
- 3 回答
- 0 關(guān)注
- 708 瀏覽
添加回答
舉報(bào)