在字符串中,替换每次出现的< 0xYZ>具有十六进制值YZ的字符。 <和>字符将仅用于此目的,字符串保证格式良好。
示例('0'= 0x30):A<0x30>B
=&gt; A0B
这是一项简单的任务,但有很多解决方案,我想知道最好的方法。
答案 0 :(得分:2)
我认为正则表达式替换是最简单的方法:
s = Regex.Replace(
s,
@"<0[Xx]([\dA-Fa-f]{2})>",
m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()
);
通过匹配精确模式,它对字符串的限制较少,例如仍然可以使用<
和>
个字符。此外,如果标签碰巧发生故障,它将只是保持不变,而不是引起异常。
这将替换<0X4A>
和<0x4a>
等标记,但保持<0x04a>
不变。
答案 1 :(得分:1)
您可以使用正则表达式轻松完成:
s = Regex.Replace(s, "<0x([0-9a-f]+)>",
m => Char.ConvertFromUtf32(
Int32.Parse(m.Groups[1].Value, NumberStyles.HexNumber))
);
可能缺少一些错误检查。这使用overload of Regex.Replace
that takes a MatchEvaluator
。
答案 2 :(得分:0)
匹配数字并转换为int然后转换为char。
var str = "A<0x30>B";
var result = Regex.Replace(str, "<0x((\\d|[A-Z])+)>",
delegate (Match m)
{
return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString();
}, RegexOptions.IgnoreCase);
输出
A0B