3 回答

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