2010-06-28 110 views
1

我给出了一个包含多个不同数据组合的字符串。c#解析包含条件的字符串,key = value

例如:

字符串数据= “(年龄= 20 &性别=男性)或(市=纽约)”
字符串数据1 = “(作业=工程&性别=女性)”
串data2 =“(foo = 1或foo = 2)&(bar = 1)”

我需要解析这个字符串并创建它的结构,我必须评估这是另一个对象的条件。例如:如果对象具有这些属性,则执行一些操作,否则跳过等。

这样做的最佳做法是什么?

我应该使用一个解析器,如antlr,并从字符串中生成令牌。等等。?

提醒:这个字符串是如何创建的几种组合。但它是全部和/或。

回答

1

使用正则表达式可能工作,如果这个例子非常简单,但它会更有可能导致无法维护的代码。使用其他一些解析方法似乎是一个好主意。

  • 我会看看NCalc - 它主要集中在解析数学表达式,但它似乎是相当定制的(你可以指定你的函数和常数),所以它可能在你的情况下工作,以及。

  • 如果这对于您的目的来说过于复杂,您可以使用C#的任何“解析器生成器”。使用ANTLR是一个很好的选择 - 这里是一个例子,显示如何开始写你的例子Five minute introduction to ANTLR

  • 你也可以尝试使用F#,这是一种伟大的语言这种问题。例如参见Chris Smith的FsLex Sample,它显示了一个简单的数学评估器 - 在F#中处理解析的表达式将比在C#中更容易。在F#中,你也可以使用FParsec,这是非常轻量级的,但如果你不习惯F#,可能有点难以遵循。