2016-12-13 5 views
0

Ich habe eine ZeichenfolgeKeeping erste Wort und das verbleibende Wort in Ruby

str = "Batman is not batman without alfred batman" 

Ich brauche alle Instanzen batman (Groß- und Kleinschreibung) zu entfernen, aber halten batman, wenn und nur wenn es sich um die erste Wort der Zeichenfolge.

Einige Beispiele:

Batman is not batman without alfred batman #=> Batman is not without alfred 
## first batman is kept, remaining batman is removed. 

batman joker BATMAN robin batMan catwoman #=> batman joker robin catwoman 
## removes all other batman instances and keep only the first batman because it is the first word. 

joker batMaN alfred batmobile batman #=> joker alfred batmobile 
## removes all batman instances because batman is not the first word. 

Der Fall zuerst batman Instanz keine Rolle spielt.

Ich versuchte str.gsub(/(batman)+/i,""), aber es entfernt stattdessen alle Instanzen. Wie kann ich batman wenn und nur wenn es das erste Wort im Satz ist, und entferne andere batman s?

Antwort

1
str.gsub!(/(?i)(?<!^)batman/, '') 

(?i) Groß- und Kleinschreibung

(?<!^) Lookbehind, dass der Anfang der Zeile nicht unmittelbar bevor er

+0

Das gibt ' "Batman ist nicht ohne alfred" zu vermeiden, benötigt wird, zurückkehrt, nachdem ein extra Raum verlassen' 'not'' und '' alfred‘ '. Die Beispiele des OP zeigen, dass diese zusätzlichen Räume entfernt werden. –

1

Eine einfache Lösung besteht darin, alle batman s zu entfernen, denen ein Leerzeichen vorangestellt ist.

str.gsub!(/ batman/i, '') 

In Aktion:

str = 'batman joker BATMAN robin batMan catwoman' 
=> "batman joker BATMAN robin batMan catwoman" 
str.gsub!(/ batman/i, '') 
=> "batman joker robin catwoman" 
2

ist Und hier ist ein nicht regexp Version:

str.split.delete_if.with_index do |word,index| 
    index > 0 and word.downcase == "batman" 
end.join(' ') 
0
str = "Batman is not batman without alfred, batman's batmanman" 

str.gsub(/\sbatman\b/i, '') 
    #=> "Batman is not without alfred,'s batmanman" 

Das Wort Pause \b

"Batman is not without alfred,'s man" 
Verwandte Themen