擦除包含特定字符的ruby中的单词

时间:2015-08-22 13:49:23

标签: ruby

正如小说所示,我想得到一些字符,并检查字符串是否为其中任何一个。如果我想,例如,"!"被禁止,然后string.replace("",word_with_!)。如果forbidden_​​chars是一个数组,我如何检查禁止的字符?

forbidden_chars = ["!",",",...]

check ARRAY (it is the string split into an array) for forbidden chars
erase all words with forbidden chars

有人可以帮我吗?我只是考虑在答案中搜索带有卡片的单词并将索引检索为必填项。非常感谢你:))

2 个答案:

答案 0 :(得分:3)

string = 'I like my coffee hot, with no sugar!'

forbidden_chars = ['!', ',']
forbidden_chars_pattern = forbidden_chars.map(&Regexp.method(:escape)).join('|')

string.gsub /\S*(#{forbidden_chars_pattern})\S*/, ''
  # => "I like my coffee  with no "

我们的想法是匹配尽可能多的非空白字符\S*,然后是任意禁用字符(!|,),然后再次使用尽可能多的非空格字符。< / p>

我们需要Regexp.escape的原因是禁止字符具有特殊正则表达式意义的情况(如.)。

答案 1 :(得分:0)

string = 'I    like my coffee strong, with no cream or sugar!'
verboten = '!,' 

string.split.select { |s| s.count(verboten).zero? }.join ' '
  #=> "I like my coffee with no cream or" 

请注意,这不会保留"I""like"之间的间距,但如果string中没有多余的空格,则返回一个没有多余空格的字符串。