我正在使用IronPython来评估C#中用python编写的表达式。表达式是组合两个字符串:Foo +“Bar”。遗憾的是,使用engine.CreateScriptSourceFromString
会删除引号,因此这个表达式的结果是FooBar而不是Foo“Bar”。那么如何在传递给CreateScriptSourceFromString
之前转义引号来实现这个目标呢?
这是我到目前为止所使用的:
engine.CreateScriptSourceFromString("Foo + \"Bar\"")
编辑:这导致了一个SyntaxErrorException,因为Python将Foo解释为变量......但应该将其作为字符串文字来处理。
答案 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();