如何在ruby中删除所有非数字符号(逗号和短划线除外)

时间:2015-09-30 17:22:37

标签: ruby regex

我为我遇到了一些艰巨的任务。我有一个字符串需要解析成数组和其他一些元素。我有 REGEXP 的麻烦,所以想请求帮助。

我需要从字符串中删除除逗号(,)和破折号( - )

之外的所有非数字

例如:

"!1,2e,3,6..-10" => "1,2,3,6-10"
"ffff5-10...." => "5-10"
"1.2,15" => "12,15"

等等。

4 个答案:

答案 0 :(得分:3)

[^0-9,-]+

这应该为你做。按empty string替换。见演示。

https://regex101.com/r/vV1wW6/44

答案 1 :(得分:2)

我们必须至少有一个非正则表达式解决方案:

def keep_some(str, keepers)
  str.delete(str.delete(keepers))
end

keep_some("!1,2e,3,6..-10", "0123456789,-")
  #=> "1,2,3,6-10" 
keep_some("ffff5-10....", "0123456789,-")
  #=> "5-10"
keep_some("1.2,15", "0123456789,-")
  #=> "12,15"

答案 2 :(得分:1)

"!1,2e,3,6..-10".gsub(/[^\d,-]+/, '') # => "1,2,3,6-10"

答案 3 :(得分:0)

使用String#gsub的模式匹配除要保留的内容之外的所有内容,并将其替换为空字符串。在一个规则表达式中,negated character class a_string.gsub /[^0-9,-]/, '' 匹配除了中所有字符之外的所有内容,因此可行:

gsub

请注意,连字符必须是最后一个,否则它将被解释为范围指示符。

为了演示,我将所有“之前”字符串放入一个数组中并使用Enumerable#map对所有字符串运行上面的["!1,2e,3,6..-10", "ffff5-10....", "1.2,15"].map { |s| s.gsub /[^0-9,-]/, '' } # => ["1,2,3,6-10", "5-10", "12,15"] 调用,生成一个“after”字符串的数组: / p>

key="a"