对 C# 字符串中的引号进行转义

本文关键字:转义 字符串 | 更新日期: 2023-09-27 18:18:07

我用 C# 编写了一个方法,该方法接受一个字符串并转义其所有引号。它逃脱了它们,使"变成'",变成'''",变成'''''''",等等。

这两个论点是inputdepth。深度决定了逃脱它的次数。深度为 1 时,字符串He says "hello"变为He says '"hello'",而深度为 2 时变为He says '''"hello'''"

private string escapestring(string input, int depth)
    {
        string result = input;
        for (int i = 20; i >= 0; i--)
        {
            int nsearch = ((int)Math.Pow(2, i)) - 1;
            int nplus = ((int)Math.Pow(2, i + depth) - 1);
            string search = new string('''', nsearch);
            search += "'"";
            result = result.Replace(search, "ESCAPE_REPLACE:" + (nplus).ToString());
        }
        for (int i = 20; i >= 0; i--)
        {
            int nsearch = ((int)Math.Pow(2, i)) - 1;
            string replace = new string('''', nsearch);
            replace += "'"";
            result = result.Replace("ESCAPE_REPLACE:" + nsearch.ToString(), replace);
        }
        return result;
    }

这是我为解决此任务而创建的。这真的很可怕,简单地用一些任意 blob 替换每组反斜杠,后跟一个符合2^X-1模式的引号,然后用转义版本替换任意 blob。它最多只能工作 20 个,而且基本上很糟糕。

就其本身而言,我想它会正常工作,但是我稍后会在循环中反复调用它,并且每次调用它时都会严重打击性能。

对如何清理这个东西有什么想法吗?我仍然认为自己是一个业余爱好者,所以我可能会错过一些非常简单的东西,但我的搜索没有找到任何有用的东西。

对 C# 字符串中的引号进行转义

不确定所有的数学是为了什么,但这样做会做到:

private string escapestring(string input, int depth)
{
    var numSlashes = (int)(Math.Pow(2, depth)-1);
    return input.Replace("'"", new string('''', numSlashes)+"'"");
}