使用IronPython转义引号
我正在使用IronPython从C#中评估用Python写的表达式。这个表达式是将两个字符串结合起来:Foo + "Bar"。使用engine.CreateScriptSourceFromString
时,不幸的是,它会去掉引号,所以这个表达式的结果是FooBar,而不是Foo"Bar"。那么,在传递给CreateScriptSourceFromString
之前,如何处理引号,以达到这个效果呢?
这是我目前使用的代码:
engine.CreateScriptSourceFromString("Foo + \"Bar\"")
编辑:这样做会导致一个SyntaxErrorException,因为Python把Foo当成了变量……但我希望它能把它当作字符串来处理。
1 个回答
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();