使用IronPython逃脱报价

时间:2014-08-25 12:42:58

标签: c# python ironpython

我正在使用IronPython来评估C#中用python编写的表达式。表达式是组合两个字符串:Foo +“Bar”。遗憾的是,使用engine.CreateScriptSourceFromString会删除引号,因此这个表达式的结果是FooBar而不是Foo“Bar”。那么如何在传递给CreateScriptSourceFromString之前转义引号来实现这个目标呢?

这是我到目前为止所使用的:

engine.CreateScriptSourceFromString("Foo + \"Bar\"")

编辑:这导致了一个SyntaxErrorException,因为Python将Foo解释为变量......但应该将其作为字符串文字来处理。

1 个答案:

答案 0 :(得分:1)

我想我已经开始工作了。以下是诀窍(据我目前估计): 因此,Python引擎需要一个用于解析的字符串,我将实际表达式包含在双引号中。因此,Python识别"Foo + \"Bar\""而不是Foo + "Bar"(这给出了上面提到的例外)。所以我实际上做的是两次逃避表达。

因此,我们得到以下代码段:

string expression = "Foo + \"Bar\"";
ScriptEngine engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromString(
        "\"" + expression.Replace("\"", "\\\"") + "\"");
object result = source.Execute();