2014-01-29 74 views
-1

我的代码下面一行: string str = "\"\\trandom string\\n\"";如何解析引用字符串

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

就像如何与被引用的字符串编译器的交易。
请注意,字符串str是随机的,这意味着任何字符,包括'\t','\n','\"'等都可能出现在结果中。我的问题是: 我可以使用C#中的现有方法吗?如果没有,你有什么建议吗?

编辑:
我要的是:
"\\t" - >'\t'
"\\n" - >'\n'
"\\\\" - >'\\'
等什么,是不是字面引号内

+3

究竟是什么你想实现什么? – rae1

+0

@ rae1我需要脚本为我的程序 –

+0

所以问题是如何将一个字符串的实例转换为其转义表示? –

回答

0
System.Text.RegularExpressions.Regex.Unescape 
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; 
+0

这只能处理引号。我需要的是处理诸如“\\ n”之类的东西,这些东西不是引号内的字面意思 –