2016-03-07 105 views
1

我正在使用NCalc.Expression来评估涉及与其中包含单引号的字符串值进行比较的条件。在NCalc中,字符串用单引号而不是双引号表示。如何在NCalc.Expression中的字符串变量中转义单引号 - 反斜线不起作用

例:

[variable1]=='Sample's Data' 

为了逃避单引号,我试图附加这样的反弹 -

[variable1]=='Sample\'s Data' 

但是,当这个被分配给一个字符串变量,它消除了反斜杠作为 -

[variable1]=='Sample's Data'

和屁股后如果将它视为Expression构造函数,那么在计算出第二个单引号“Data”后的文本无法识别时会引发错误。

当我尝试追加如下两个反斜杠 -

[variable1]=='Sample\\'s Data'

这个被分配给一个字符串变量作为

"[variable1]=='Sample\'s Data'"

,但在评价它不抛出异常,但由于数据为

"[variable1]=='Sample's Data'"

没有反斜杠。

我该如何解决这个问题?

+0

你用4''试过了吗? –

+0

我回答了在表达式中转义引号的可能方法。如果这些不是您正在寻找的内容,请给出一个最小的可重复示例,我们可以将其粘贴到VS中并用于帮助解决问题。 –

回答

0

一种可能的方式是使用Unicode码点'这是U+0027

var e = new Expression(@"'Sample\u0027s Data'"); 
var evaluated = e.Evaluate(); 

Source

或者干脆:

var e = new Expression(@"'Sample\'s Data'"); 
var evaluated = e.Evaluate(); 

没有逐字字符串:

var e = new Expression("'Sample\\'s Data'"); 
var evaluated = e.Evaluate(); 

这给true

var e = new Expression("variable=='Sample\\'s Data'"); 
e.Parameters["variable"] = "Sample's Data"; 
var evaluated = e.Evaluate(); 
+0

也许我错过了一些东西,但除了这个建议之外,其他人与他已经尝试过的有什么不同? – dman2306

+0

只显示在表达式中转义引号的方法。那么我可能不明白他的问题。我认为这是他遇到的问题。如果没有,那么他应该给我一个代码示例,我可以复制到VS并修复它。 –

+0

谢谢你的回应。 Unicode方法工作正常。我曾尝试过其他选择,但由于最初提到的例外情况,它们不起作用。感谢您的快速响应。 –

相关问题