我要转换:
"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"
答案 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"