2017-03-03 3 views
-1

ich folgende Zeichenfolge analysieren müssen,C# Parse-Filterstring

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

und erhalten,

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

Was ist der beste Weg, dies zu tun?

brauche ich wie komplexe Abfragen zu analysieren,

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

Ja, ich in String-Split sah, regex, iterieren von char. Gibt es eine Bibliothek, um diese Dinge zu tun? Ich suche nach einem komplexen Filter-Abfrage-Parsing. Ich habe mir Antlr angeschaut, aber ich kann leider nicht funktionieren .net core + VS2017.

+0

Spaltung durch Raum und Sonderzeichen entfernen, die es ist. :) –

+0

Sind die '' '' '' '' '' '' '' '' '' '' '' '' '' Teil der Zeichenfolge oder etwas, das Sie eingefügt haben, damit wir die Anführungszeichen sehen? –

Antwort

2

I komplexe Abfragen

Woo Junge, haben Sie eine Dose Würmer geöffnet analysieren müssen.

Wenn Sie Glück haben, brauchen Sie nur Tokens, die Sie woanders für den eigentlichen Filter finden. In diesem Fall sollten Sie Google oder NuGet für einen C# -Lexer oder Tokenizer suchen, damit Sie eine faire Note erhalten mple Lösungen, die bereit sind zu gehen.

Wenn Sie den Filter tatsächlich selbst aus diesen Token implementieren müssen, müssen Sie genauer hinschauen. Im Idealfall verwenden Sie eine bekannte Grammatik (zB einen Filter für elastische Suche oder parse.com), und es wird einen vorhandenen Parser geben, den Sie verwenden können. Aber wenn nicht, gibt es immer noch Tools, die dir helfen können. ANTLR ist einer von diesen, und es hat eine C# library, die Sie verwenden können. .Net hat auch eine eingebaute Unterstützung für Domain Specific Languages.

Aber die Hauptsache ist zu vermeiden, diesen Code von Grund auf selbst zu schreiben. Wenn Sie sich wirklich mit komplexen Abfragen beschäftigen, werden Sie sich auf lange Sicht eine Menge Kummer ersparen, wenn Sie sich die Zeit nehmen, dieses Zeug zu lernen.

+0

Tnx für den Rat, ich freue mich zu implementieren https://tools.ietf.org/html/rfc7644#section-3.4.2.2 SCIM spec. Ich werde in diese Werkzeuge schauen. – Dhanuka777

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

und entfernen "in rightpart (wie Mohit oben erwähnt)

0

Man könnte es so manuell tun:

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];