删除部分字符串(小写),将原始字符串(大写)保留在Ruby中

时间:2019-02-05 08:59:07

标签: ruby string gsub

我想从红宝石字符串中删除一组单词,并使用单词的小写和无重音版本,并使用当前的大写字母和当前的重音符号保留原始字符串。

例如:

string = "Château Dupont Vallée du Rhône" 
stopwords= "vallee du Rhone"

所需的输出:string = "Château Dupont"

到目前为止,我所能做的就是使用小写的不带重音的字符串来删除单词:

string = "chateau dupont vallee du rhone" 
stopword = "vallee du rhone"

示例输出:string = "chateau dupont"

实际上,我想获取原始字符串,但使用单词的小写无重音版本删除字符串。

我的代码:

def remove_appellations_in_string(string, region_id)
   down_trans_string = I18n.transliterate(string.dup)      
   # custom request to order by max length in name            
   stopwords.each do |stop|
      # downcase/unaccent stopword
      down_trans_stop = I18n.transliterate(stop.name.downcase)
      # remove
      down_trans_string.gsub!(down_trans_stop, ' ')
    end    
    return ' ' + string + ' ' 
  end

我想我需要使用一个正则表达式或一种获取停用词索引的方法,以将其从原始字符串中删除。

1 个答案:

答案 0 :(得分:2)

这似乎可行:

string = "Château Dupont Vallée du Rhône"   
stopword = "vallee du rhone"  
index = I18n.transliterate(string).downcase.index(I18n.transliterate(stopword).downcase)
string[0..(index - 1)] + string[(index + stopword.length)..-1]

# => "Château Dupont "

stopword = "Dupont" 
index = I18n.transliterate(string).downcase.index(I18n.transliterate(stopword).downcase)
string[0..(index - 1)] + string[(index + stopword.length)..-1]

# => "Château  Vallée du Rhône"

它按照您的建议执行-获取停用词与剥离的字符串匹配的位置的索引,并在此之前和之后返回文本。

这就是你的追求吗?如果您有任何疑问,请告诉我。