Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 重构正则表达式调用_Ruby_Regex - Fatal编程技术网

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