2016-05-24 9 views
0

Wie würde ich eine Zeichenfolge basierend auf zwei String-Trennzeichen wie " of " und " in " teilen.Wie auf zwei String-Begrenzer aufgeteilt werden

Zum Beispiel die Zeichenfolge:

"dogs in Toronto of Canada" 

in das Array verwandeln würde:

["dogs", "Toronto", "Canada"] 
+1

Willkommen bei SO; hier findest du etwas auf [fragen]. Es wäre ein guter Ausgangspunkt, um das, was Sie bisher versucht haben, zu posten und uns zu zeigen, dass Sie einige Recherchen und Versuche unternommen haben, bevor Sie posten. – Aleksej

+0

Neben "[fragen]", lesen Sie bitte https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ und http://catb.org/esr/faqs/smart-questions .html –

Antwort

3

Sie String#split mit regex verwenden können:

"dogs in Toronto of Canada".split(/\sof\s|\sin\s/) 
=> ["dogs", "Toronto", "Canada"] 
+0

Auch: '/ \ b (of | in) \ b /' – tadman

+0

@tadman, ich habe gerade in Regex ursprüngliche Trennzeichen mit Leerzeichen ("oder", "in") umgewandelt. – Ilya

+0

'" von Hunden in Toronto ".split (/ \ sof \ s | \ sin \ s /) # => [" von Hunden "," Toronto "]' vs '" von Hunden in Toronto ".split (/ \ b (?: von | in) \ b /) # => ["", "Hunde", "Toronto"] '. –

0

Hier ist eine Allzweck- eins:

dogs.split(/\b\s*(?:of|in)\s*\b/) 

Da ist eine Menge Gruft drin, aber es behandelt unregelmäßigen Abstand, of erscheint am Anfang oder Ende der Phrase, und so weiter.

Sie können auch versuchen, diese, die noch flexibler auf Kosten der Lesbarkeit ist:

splits = %w[ of in at on ] 
pattern = Regexp.new('\b\s*%s\s*\b' % Regexp.union(splits)) 

dogs.split(pattern).reject(&:empty?) 
Verwandte Themen