如何用C#正则将字符串中花括号内的ASCII数字转对应字符?
解决方案:还原ASCII编码格式的特殊字符
你可以通过System.Text.RegularExpressions结合匹配回调来实现需求,核心思路是匹配{数字}格式的字符串,将捕获到的ASCII码转换回对应字符。以下是完整的C#实现:
using System; using System.Text.RegularExpressions; public static class StringDecoder { public static string DecodeEncodedSpecialChars(string input) { // 匹配花括号包裹的ASCII数字,捕获括号内的数字部分 var pattern = @"{(\d+)}"; return Regex.Replace(input, pattern, match => { // 提取捕获组中的数字字符串 if (int.TryParse(match.Groups[1].Value, out int asciiCode)) { // 仅处理目标特殊字符对应的ASCII码(#=35, _=95, ?=63, %=37, @=64) var targetAsciiCodes = new[] { 35, 95, 63, 37, 64 }; if (Array.IndexOf(targetAsciiCodes, asciiCode) != -1) { return ((char)asciiCode).ToString(); } } // 解析失败或不在目标范围内时,保留原匹配内容 return match.Value; }); } }
使用示例
string encodedStr = @"C:\Folder{35}3\File{95}1{95}{64}.TXT"; string decodedStr = StringDecoder.DecodeEncodedSpecialChars(encodedStr); Console.WriteLine(decodedStr); // 输出结果:C:\Folder#3\File_1_@.TXT
关键说明
- 正则表达式:
@"{(\d+)}"精准匹配{数字}结构,(\d+)作为捕获组提取内部的ASCII数字。 - 匹配回调:通过
MatchEvaluator委托处理每个匹配项,先尝试将捕获的数字转为整数,再验证是否属于目标字符的ASCII码,符合条件则转换为对应字符返回。 - 容错处理:如果捕获的内容不是有效数字,或者不在目标字符范围内,会保留原内容,避免破坏字符串其他部分。
如果需要支持所有ASCII范围内的字符(0-127),可以去掉目标ASCII码的校验逻辑,改为判断asciiCode >= 0 && asciiCode <= 127后直接转换即可。
内容的提问来源于stack exchange,提问作者Daniel Santos
相关产品推荐
相关产品推荐

