2010-06-28 109 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#,可能有點難以遵循。