我是正则表达式的新手,我需要帮助缩小以下代码:
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
Key是一个(杂乱的)字符串数组,我想压缩成一个查询字符串,所有特殊字符都被吹掉,空格用下划线替换,并用冒号连接,所以我可以产生新的字符串(查询)他们的键数组不变。
答案 0 :(得分:1)
Ruby鼓励方法链接:
def finalize
query = key.map { |word| word.gsub(/\s/, '_').gsub(/\W/, '') }.join(":").downcase
yield [ query, key, aggregate_scores].flatten
end
答案 1 :(得分: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
将它们连接在一起,然后清除它,忽略冒号。唯一的问题是如果原始键有冒号,因为它们不会被剥离。