我要把<mi>&#x6B63;</mi>字符串替换成<mo>正</mo>
6b63是十六进制,长度是固定的,其他字符也是固定的,现在要把6b63取出来,通过System.Text.Encoding.BigEndianUnicode.GetString(new byte[]{0x6B,0x63});转换得到“正”字,如:
<mi>&#x6B63;</mi><mi>&#x8868;</mi><mi>&#x5F0F;</mi>
替换为:
<mo>正</mo><mo>表</mo><mo>式</mo>

解决方案 »

  1.   

    这个我觉得可以有两种思路:
    1.不使用正则表达式,使用String.Replace()方法,建立一张编码和字符的对照表,依次替换对照表中的每一个编码。
    2.使用正则表达式,取出所有<mi></mi>之间的字符,使用Encoding.…(编码格式).GetString(),获取相应编码对应的文字。然后根据表达式中的index,依次替换文本中的字符。
      

  2.   

    可以使用正则表达式string regexStr = "&#x([0-9a-fA-F]{2})([0-9a-fA-F]{2})";string yourStr = "<mi>&#x6B63;</mi><mi>&#x8868;</mi><mi>&#x5F0F;</mi>";MatchCollection mc = Regex.Matches(yourStr, regexStr);foreach(Match m in mc)
    {
        string temp1 = m.Groups[1].Value;//6b
        string temp2 = m.Groups[2].Value;//63
    }
      

  3.   

    找到办法了,采用MatchEvaluator可以解决