2016-12-13 7 views
0

の残りの単語を削除し、私は私がbatman大文字小文字を区別しない)のすべてのインスタンスを削除しますが、場合バットマンを維持し、それが最初である場合にのみ必要がある文字列最初の単語を維持し、Rubyの

str = "Batman is not batman without alfred batman" 

を持っています文字列の単語。

いくつかの例:

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. 

最初のバットマン・インスタンスの場合は関係ありません。

私はstr.gsub(/(batman)+/i,"")を試しましたが、代わりにすべてのインスタンスを削除します。 batmanは、文の最初の単語であればどうすればいいですか?他の単語はbatmanで削除しますか?

答えて

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

(?i)場合は、行の先頭には、それ

+0

戻っ避けるために必要とされる単語'。 OPの例は、余分なスペースが削除されていることを示しています。 –

1

単純な解決策は、すべての前にスペースがあるbatmanを削除することです。アクションで

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

(?<!^)小文字を区別しない

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

直前ではなく、ここでは非であることを後読み正規表現バージョン:

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" 

ブレーク\bが「not'`と `」アルフレッド」`の後に余分なスペースを残して、「バットマンはアルフレッドがないわけではない」 `これは返す

"Batman is not without alfred,'s man" 
関連する問題