2010-11-13 48 views
1

我是新来的正则表达式,我需要帮助冷凝下面的代码:重构正则表达式调用

def finalize 
    query = key 
    query.each { |word| word.gsub!(/\s/, '_') } 
    query.each { |word| word.gsub!(/\W/, '') } 
    yield [ query.join(":").downcase, key, aggregate_scores].flatten 
end 

主要是(乱)的字符串数组,我想凝结成一个查询字符串,所有特殊字符被吹走,空格被下划线替换,并且被冒号连接,所以我可以随着他们的关键数组不变而产生新的字符串(查询)。

回答

1

红宝石鼓励方法链接:

def finalize 
    query = key.map { |word| word.gsub(/\s/, '_').gsub(/\W/, '') }.join(":").downcase 
    yield [ query, key, aggregate_scores].flatten 
end 
0

一件事,你可以链gsubs在一起:

word.gsub!(/\s/, '_').gsub!(/\W/, '') 

我认为这确实是相同的:

yield [key.collect {|word| word.gsub(/\s/, '_').gsub(/\W/, '').downcase}.join(":"), key, aggregate_scores].flatten 

但我也想知道为什么还要循环做gsubs。

yield [key.join(":").gsub(/\s/,'_').gsub(/[^\w:]/,"").downcase, key, aggregate_scores].flatten 

将它连接在一起,然后清理它,忽略冒号。唯一的问题是如果原始密钥有冒号,因为它们不会被剥离。

+0

不,不要做'word.gsub .gsub'!​​。 'gsub!'可以返回'nil',你会得到一个异常。使用'word = word.gsub.gsub' – Nakilon 2010-11-13 05:40:11