C# 如何解析带引号的字符串
我有以下代码行:C# 如何解析带引号的字符串,c#,string,C#,String,我有以下代码行: string str=“\”\\trandom string\\n\” 现在我需要一种方法来获得: string result=“\trandom string\n” 就像编译器处理带引号的字符串一样。 请注意,字符串str是随机的,这意味着结果中可能会出现任何字符,包括'\t','\n','\'等 我的问题是: 在C#中有我可以使用的现有方法吗?如果没有,你有什么建议吗 编辑: 我想要的是: “\\t”->'\t' “\\n”->'\n' “\\\\”->“\\\” 等等。任
string str=“\”\\trandom string\\n\”代码>
现在我需要一种方法来获得:
string result=“\trandom string\n”代码>
就像编译器处理带引号的字符串一样。
请注意,字符串str
是随机的,这意味着结果中可能会出现任何字符,包括'\t'
,'\n'
,'\'
等
我的问题是:
在C#中有我可以使用的现有方法吗?如果没有,你有什么建议吗
编辑:
我想要的是:
“\\t”
->'\t'
“\\n”
->'\n'
“\\\\”
->“\\\”
等等。任何不在引号内的文字都是简单状态机的最佳时机
编辑:为转义字符添加了第三个状态,这个状态机假设您只关心引号中的转义字符,对于在任何地方处理转义字符的状态机,它将有更多的状态,但我认为这提供了一个足够好的构建块
//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;
你到底想实现什么?@rae1我需要为我的程序编写脚本,所以问题是如何将字符串实例转换为其转义表示形式?我真的不明白。假设你的输入字符串是“a\\tb“
,您希望输出字符串是什么样的<代码>a b
?@StevenLiekens还是相反?他是否要将\\t
调到\t
@MichaelKim也许将你的问题扩展到更大范围的细节将有助于我们理解你试图实现的目标。这只能涉及引号。我需要的是处理诸如“\\n”之类的东西,即引号内没有文字的东西
System.Text.RegularExpressions.Regex.Unescape