使用IronPython转义引号

0 投票
1 回答
817 浏览
提问于 2025-04-18 18:26

我正在使用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();

撰写回答