保留第一个字并删除Ruby中的剩余单词

时间:2016-12-13 17:38:15

标签: ruby regex

我有一个字符串

str = "Batman is not batman without alfred batman"

我需要删除batman不区分大小写)的所有实例,但是当且仅当它是字符串的第一个单词时才保留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

4 个答案:

答案 0 :(得分:2)

这是一个非正则表达式版本:

str.split.delete_if.with_index do |word,index|
  index > 0 and word.downcase == "batman"
end.join(' ')

答案 1 :(得分: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 :(得分:1)

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

(?i)不区分大小写

(?<!^)看起来线条的开头不是紧接在它之前

答案 3 :(得分:0)

str = "Batman is not batman without alfred, batman's batmanman"

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

需要使用单词break \b来避免返回

"Batman is not without alfred,'s man"