重构正则表达式调用

时间:2010-11-13 00:48:24

标签: ruby regex

我是正则表达式的新手,我需要帮助缩小以下代码:

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是一个(杂乱的)字符串数组,我想压缩成一个查询字符串,所有特殊字符都被吹掉,空格用下划线替换,并用冒号连接,所以我可以产生新的字符串(查询)他们的键数组不变。

2 个答案:

答案 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

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