我为我遇到了一些艰巨的任务。我有一个字符串需要解析成数组和其他一些元素。我有 REGEXP 的麻烦,所以想请求帮助。
我需要从字符串中删除除逗号(,)和破折号( - )
之外的所有非数字例如:
"!1,2e,3,6..-10" => "1,2,3,6-10"
"ffff5-10...." => "5-10"
"1.2,15" => "12,15"
等等。
答案 0 :(得分:3)
答案 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"