string txt=@"\u4e03";
txt=Regex.Replace(txt,@"\u([a-f0-9]{4})","$1",RegexOptions.IgnoreCase);这样的话会显示:
正在分析“\u([a-f0-9]{4})”- 十六进制位数不足,
如果是这样
txt=Regex.Replace(txt,@"\\u([a-f0-9]{4})","$1",RegexOptions.IgnoreCase);
那第就是正确的,为什么,这是第一个问题第二个问题,当匹配得到的$1是4e03,如果我想对$1进行加工,为什么不行,如
txt=Regex.Replace(txt,@"\\u([a-f0-9]{4})",msg("$1"),RegexOptions.IgnoreCase);private void msg(string aa)
{
   Console.Write(aa.Length.ToString());
}显示结果始终是2,应该是4才对啊,因为$1是4e03请大家帮忙,郁闷

解决方案 »

  1.   

    1:在正则表达式里面\u代表unicode字符,\\表示字符\,u表示字母u,所以\\u才匹配\u
    2:你那个函数里传进去的肯定是"$1",当然长度是2了
      

  2.   

    当匹配得到的$1是4e03,如果我想对$1进行加工,为什么不行,如
    string txt=@"\u4e03";
    txt=Regex.Replace(txt,@"\\u([a-f0-9]{4})",msg("$1"),RegexOptions.IgnoreCase);private void msg(string aa)
    {
       Console.Write(aa.Length.ToString());
    }显示结果始终是2,应该是4才对啊,因为$1是4e03那么如何修改让得到的结果是4呢
      

  3.   

    txt=Regex.Replace(txt,@"\\u([0-9a-z]{4})",new MatchEvaluator(msg),RegexOptions.IgnoreCase);private static string msg(Match m)
    {
    string aa = m.Groups[1].ToString();
    Console.Write(aa.Length);
    return aa;
    }