繁体   English   中英

c# 解析包含条件的字符串,key=value

[英]c# parse a string that contains conditions , key=value

我给出了一个包含几种不同数据组合的字符串。

例如 :

字符串数据 = "(age=20&gender=male) or (city=newyork)"
字符串数据1 =“(工作=工程师&性别=女性)”
字符串 data2 = "(foo =1 或 foo = 2) & (bar =1)"

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

执行此操作的最佳做​​法是什么?

我应该使用诸如 antlr 之类的解析器并从字符串中生成令牌。 等等。?

提醒:此字符串的创建方式有多种组合。 但这就是全部和/或。

像 ANTLR 这样的东西对此可能有点过头了。

调车场算法的一个简单实现可能会很好地完成这个技巧。

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

  • 我会看看NCalc - 它主要专注于解析数学表达式,但它似乎非常可定制(您可以指定您的函数和常量),因此它也可以在您的场景中使用。

  • 如果这对您来说太复杂了,您可以使用 C# 的任何“解析器生成器”。 使用 ANTLR 是一个不错的选择 - 这是一个示例,展示了如何开始编写类似于您的示例的内容五分钟介绍 ANTLR

  • 您也可以尝试使用 F#,它是解决此类问题的绝佳语言。 例如,参见 Chris Smith 的FsLex Sample ,它展示了一个简单的数学计算器 - 在 F# 中处理解析的表达式会比在 C# 中容易得多。 在 F# 中,您也可以使用FParsec ,它非常轻量级,但如果您不习惯 F#,可能会有点难以理解。

似乎您可能想使用正则表达式来做到这一点。

稍微阅读一下 .NET 中的正则表达式。 这里有一些不错的文章:

当需要编写/测试您的正则表达式时,我强烈建议您使用 RegExLib.com 的regex tester

我建议你看看正则表达式: http : //www.codeproject.com/KB/dotnet/regextutorial.aspx

Antlr 是一个很棒的工具,但您可能可以使用正则表达式来做到这一点。 .NET 正则表达式引擎的优点之一是支持嵌套结构。

http://retkomma.wordpress.com/2007/10/30/nested-regular-expressions-explained/

这个 SO 帖子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM