在数字中插入连字符

时间:2018-08-26 04:42:48

标签: ruby regex

我要转换:

"890414.14.1422, 900515141092, 950616-12-5414"

收件人:

"890414-14-1422, 900515-14-1092, 950616-12-5414"

我该如何实现?

我尝试过:

def format_ids(string)
  string.gsub(/(\d{6})[.-](\d{2})[.-](\d{4})/, '\1-\2-\3')
end

format_ids("890414.14.1422, 900515141092, 950616-12-5414")
# => "890414-14-1422, 900515141092, 950616-12-5414"

2 个答案:

答案 0 :(得分:2)

您应该使输入字符串中的定界符非强制性

- string.gsub(/(\d{6})[.-](\d{2})[.-](\d{4})/, '\1-\2-\3')
+ string.gsub(/(\d{6})[.-]?(\d{2})[.-]?(\d{4})/, '\1-\2-\3')

在分隔符后注意问号,它们可以解决问题。

答案 1 :(得分:2)

我建议分两次进行,第一次删除句点和连字符,第二次插入连字符。与使用单个正则表达式相比,这更简单,而且我希望它的效率不会降低。

str = "890414.14.1422, 900515141092, 950616-12-5414"

str.delete('.-').
    gsub(/\d+/) { |s| "%s-%s-%s" % [s[0,6], s[6,2], s[8..-1]] }
  #=> "890414-14-1422, 900515-14-1092, 950616-12-5414"

其中

str.delete('.-')
  #=> "890414141422, 900515141092, 950616125414"