regex 将字符串中多个位置的花括号之间的ASCII数字转换为它们的char等效值

t30tvxxf  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(129)

我在一个数据库表中有一列存储字符串,其中SOME非字母数字字符存储为花括号之间的ASCII整数。
示例:C:\Folder#3\File_1_@.TXT在数据库中存储为C:\Folder{35}3\File{95}1{95}{64}.TXT
我想写一个函数,我可以传递一个字符串作为参数,然后检查它是否包含字符# ?% @
如果是这样,我想处理字符串并将这些ASCII转换回它们的char等价物。
简而言之,如果我传递“C:\Folder{35}3\File{95}1{95}{64}.TXT”作为输入字符串,我希望“C:\Folder#3\File_1
@.TXT”作为输出。
我一直在尝试使用System.Text.RegularExpressions来解决这个问题,但没有任何进展。
任何帮助都很感激。

tyky79it

tyky79it1#

你只需要在正则表达式中使用lambda表达式。替换:

var input = @"C:\Folder{35}3\File{95}1{95}{64}.TXT";
        var output = Regex.Replace(input, @"\{(\d+)\}", m => ((char)int.Parse(m.Groups[1].Value)).ToString());

输出结果:

C:\Folder#3\File_1_@.TXT

函数((char)int.Parse(m.Groups[1].Value)).ToString())从ascii值中获取字符(这里是字符串而不是int)

1yjd4xko

1yjd4xko2#

我觉得你解决问题的方法很好。我可以建议你用途:

public static string Replace (string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator, System.Text.RegularExpressions.RegexOptions options);

你的模式可以是正则表达式:**{.}|{..}|{...}**匹配大括号内的所有字符(最多3个字符),您的匹配计算器可能只是一个ASCII到char转换器。
请参阅下面的Microsoft文档:
system-text-regularexpressions-regex-replace

km0tfn4u

km0tfn4u3#

希望这能帮上忙。

String address = "C:\\Folder{35}3\\File{95}1{95}{64}.TXT";

while (address.Contains("{")) {
    Int32 start = address.IndexOf("{");
    Int32 end = address.IndexOf("}");

    String subString = address.Substring(start, end - start + 1);

    Char @char =  (Char)Int32.Parse((address.Substring(start + 1, end - start - 1)));

    address = address.Remove(start, end - start + 1);
    address = address.Insert(start, @char.ToString());

    //or
    //address = address.Replace(subString, @char.ToString());
}

Console.WriteLine(address);

相关问题