如何解析带引号的字符串

时间:2014-01-29 14:34:24

标签: c# string

我有以下代码行: string str = "\"\\trandom string\\n\"";

现在我需要一个方法来获取: string result = "\trandom string\n";

就像编译器如何处理带引号的字符串一样 请注意,字符串str是随机的,这意味着任何字符(包括'\t''\n''\"'等都可能出现在结果中。

我的问题是: 我可以使用C#中现有的方法吗?如果没有,你有什么建议吗?

编辑:
我想要的是:
"\\t" - > '\t'
"\\n" - > '\n'
"\\\\" - > '\\'
等任何在引号内不是字面的东西

2 个答案:

答案 0 :(得分:0)

简单状态机的完美时间。

编辑:为转义字符添加了第三个状态,这个状态机假定你只关心引号中的转义字符,对于在任何地方处理转义字符的情况,它会有更多的状态,但我认为这给了一个足够好的构建块。

//define somewhere in your class
enum states { NOT_IN_QUOTES, IN_QUOTES, ESCAPE_CHAR }

//inside a function
states state = states.NOT_IN_QUOTES;
string result = "";
foreach(char c in str)
{
    switch(state)
    {
         case states.NOT_IN_QUOTES:
             if (c == '\"')
             {
                 state = states.IN_QUOTES;
             }
         break;
         case states.IN_QUOTES:
             if (c == '\"')
             {
                 state = states.NOT_IN_QUOTES;
             }
             else if (c == '\\')
             {
                 state = states.ESCAPE_CHAR;
             }
             else
             {
                  result += c;
             }
         break;
         case states.ESCAPE_CHAR:
             state = states.IN_QUOTES;
             result += c;
         break;
     }
}
return result;

答案 1 :(得分:0)

System.Text.RegularExpressions.Regex.Unescape