2016-07-14 7 views
0

Ich möchte einen String aufgeteilt werden, basierend auf einem Array spalten, die ich als eine Konstante zu Beginn definieren:Wie String basierend auf vordefinierten Werten von Array

class Query 
    OPERATOR = [':','=','<','>','<=','>='] 
    def initialize(params) 
    #Here i want to split given params if it contains any 
    #of the operators from OPERATOR  
    end 
end 

Query.new(["Status<=xyz","Org=abc"]) 

Wie kann ich das tun?

+0

Wenn Sie nach einem Problem mit Ihrem Code fragen, ist es hilfreich, wenn Sie die Beispieleingabe und die erwartete Ausgabe angeben. Wenn wir unsere eigenen Input- und Output-Erwartungen erstellen, werden wir nicht unbedingt die Kriterien erfüllen, die Sie haben. Lesen Sie "[mcve]". Während Sie eine Shell bereitstellen, zeigen Sie keinen Versuch an, das Problem zu beheben. Es ist wirklich wichtig, dass Sie uns zeigen, was Sie versucht haben und warum es nicht funktioniert hat. Wenn Sie dies nicht tun, sieht es so aus, als wollten Sie, dass wir den Code für Sie schreiben. –

Antwort

3
OPERATOR = ['<=','=>',':','=','<','>'] 

r = /\s*#{ Regexp.union(OPERATOR) }\s*/ 
    #=> /\s*(?-mix:<=|=>|:|=|<|>)\s*/ 

str = "Now: is the =time for all <= to =>" 

str.split(r) 
    #=> ["Now", "is the", "time for all", "to"] 

beachte, dass ich die Elemente OPERATOR so neu geordnet, daß '<=' und '=>' (jeweils aus zwei Zeichenketten der Länge eins in dem Array) am Anfang sind. Wenn das nicht geschieht,

OPERATOR = [':','=','<','>','<=','>='] 
r = /\s*#{ Regexp.union(OPERATOR) }\s*/ 
    #=> /\s*(?-mix::|=|<|>|<=|>=)\s*/ 
str.split(r) 
    #=> ["Now", "is the", "time for all", "", "to"] 

str.split(r) 

Siehe Regexp::union.

+0

Danke das funktioniert aber mit einem kleinen Problem. Siehe Ausgabe unten. Scheint so, als würde es <= or > = es fügt tatsächlich eine leere Zeilenumbruch. Jetzt ist die Zeit für alle bis – Junaid

+0

Vielen Dank für das hinweisend. Ich habe das Problem behoben. –

+0

Danke. Es zeigt immer noch weiße Leerzeichen, aber ich bin mir sicher, dass ich das herausfinden werde. – Junaid