2017-03-03 115 views
-1

我需要解析以下字符串,C#解析過濾字符串

var filter = "username eq \"john.smith\"" 

,並得到,

var leftPart = "username" 
var operator = "eq" 
var rightPart = "john.smith" 

什麼是做到這一點的最好方法是什麼?

我需要解析複雜的查詢一樣,

filter=userType eq "Employee" and emails.type eq "work" 

是啊,我看着字符串分割,正則表達式,通過焦炭迭代。有沒有圖書館做這些事情?我正在尋找一個複雜的過濾器查詢解析。我看着Antlr,但不幸的是我無法得到它的工作.net核心+ VS2017。

+0

的空間分割,並刪除特殊字符就是這樣。 :) –

+0

字符串是字符的一部分,還是包含的內容,以便我們看到引號? –

回答

2

我需要解析複雜的查詢

宇的男孩,你有沒有打開一罐蠕蟲。

如果幸運的話,你真正需要的就是令牌,以便通過別的地方去實際的過濾器,在這種情況下,在Google或NuGet中搜索C#詞法分析器或標記器應該給你相當的si準備好的多種解決方案。

如果您確實需要自行實施這些令牌的過濾器,則需要更深入。理想情況下,您使用的是某種着名的語法(即:用於彈性搜索或parse.com的過濾器),並且會有現成的解析器可供您使用。但是,如果沒有,還有一些工具可以幫助你。 ANTLR就是其中之一,它有一個C# library您可以使用。 .Net也有一些內置的支持Domain Specific Languages

但主要是避免從頭開始編寫代碼。如果你真的處理複雜的查詢,現在花時間學習這些東西,從長遠來看將會爲你節省大量的痛苦。

+0

tnx的建議,我期待着實施https://tools.ietf.org/html/rfc7644#section-3.4.2.2 SCIM規範。我會研究這些工具。 – Dhanuka777

0
String[] substrings = filter.Split(' '); 
leftPart = substrings[0] ... 

,並刪除「在rightpart(如莫希特如上所述)

0

你可以做手工這樣的:

var filter = "username eq \"john.smith\""; 
var parts = filter.Split(" \"\\".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
var leftPart = parts[0]; 
var oper = parts[1]; 
var rightPart = parts[2];