【问题标题】:How to escape single quote within string variable in NCalc.Expression - Backslash didn't work如何在 NCalc.Expression 中的字符串变量中转义单引号 - 反斜杠不起作用
【发布时间】:2016-05-18 22:45:18
【问题描述】:

我正在使用 NCalc.Expression 来评估一个条件,该条件涉及与其中包含单引号的字符串值进行比较。在 NCalc 中,字符串使用单引号而不是双引号来表示。

例如:

[variable1]=='Sample's Data'

为了逃避单引号,我尝试像这样附加一个反冲 -

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

但是当它被分配给一个字符串变量时,它会将反斜杠删除为 -

[variable1]=='Sample's Data'

并且在将 this 分配给 Expression 构造函数之后,它会在评估第二个单引号“s Data”之后的文本时引发错误。

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

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

this 被赋值给一个字符串变量

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

但评估它不会引发异常,但比较失败,因为数据是

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

没有反斜杠。

我该如何解决这个问题?

【问题讨论】:

  • 你试过 4 \ 吗?
  • 我回答了在表达式中转义引号的可能方法。如果这些不是您要查找的内容,请提供一个最小的、可重现的示例,我们可以将其粘贴到 VS 中并用于帮助解决问题。

标签: c# string expression ncalc


【解决方案1】:

一种可能的方法是使用' 的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();

【讨论】:

  • 也许我遗漏了一些东西,但除了 \u0027 建议之外,其他的与他已经尝试过的有何不同?
  • 只是展示了在表达式中转义引号的方法。也许我当时不明白他的问题。我以为这就是他的问题所在。如果没有,那么他应该给出一个代码示例,我可以复制到 VS 并修复它。
  • 感谢您的回复。 Unicode 方法运行良好。我尝试了其他选项,但由于我最初提到的异常,它们没有工作。感谢您的快速响应。
【解决方案2】:

根据维基https://ncalc.codeplex.com/wikipage?title=values&referringTitle=Home#strings

您可以使用 \\、\'、\n、\r、\t 转义特殊字符。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 2021-10-08
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2021-10-14
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多