Ruby 重构正则表达式调用
我不熟悉正则表达式,需要帮助压缩以下代码:Ruby 重构正则表达式调用,ruby,regex,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是一个(凌乱的)字符串数组,我想将其压缩成一个查询字符串,所有特殊字符
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是一个(凌乱的)字符串数组,我想将其压缩成一个查询字符串,所有特殊字符都被去掉,空格替换为下划线,并用冒号连接,这样我就可以在它们的Key数组不变的情况下生成新字符串(query)。首先,您可以将gsub链接在一起:
word.gsub!(/\s/, '_').gsub!(/\W/, '')
我认为这也是一样的:
yield [key.collect {|word| word.gsub(/\s/, '_').gsub(/\W/, '').downcase}.join(":"), key, aggregate_scores].flatten
但我也想知道为什么要费心循环来做GSUB
yield [key.join(":").gsub(/\s/,'_').gsub(/[^\w:]/,"").downcase, key, aggregate_scores].flatten
它将所有元素连接在一起,然后清除它们,忽略冒号。唯一的问题是如果原始密钥有冒号,因为它们不会被剥离。首先,您可以将GSUB链接在一起:
word.gsub!(/\s/, '_').gsub!(/\W/, '')
我认为这也是一样的:
yield [key.collect {|word| word.gsub(/\s/, '_').gsub(/\W/, '').downcase}.join(":"), key, aggregate_scores].flatten
但我也想知道为什么要费心循环来做GSUB
yield [key.join(":").gsub(/\s/,'_').gsub(/[^\w:]/,"").downcase, key, aggregate_scores].flatten
它将所有元素连接在一起,然后清除它们,忽略冒号。唯一的问题是如果原始密钥有冒号,因为它们不会被剥离。Ruby鼓励方法链接:
def finalize
query = key.map { |word| word.gsub(/\s/, '_').gsub(/\W/, '') }.join(":").downcase
yield [ query, key, aggregate_scores].flatten
end
Ruby鼓励方法链接:
def finalize
query = key.map { |word| word.gsub(/\s/, '_').gsub(/\W/, '') }.join(":").downcase
yield [ query, key, aggregate_scores].flatten
end
不,不要做
word.gsub!。gsub代码><代码>gsub
可以返回nil
,您将得到一个异常。使用word=word.gsub.gsub
No,不要使用word.gsub!。gsub代码><代码>gsub
可以返回nil
,您将得到一个异常。使用word=word.gsub.gsub