使用RegEx格式化字符串以设置分隔符

时间:2013-03-15 03:46:07

标签: ruby regex delimiter gsub

我正在尝试格式化字符串,如下所示

确保所有数字都使用破折号作为分隔符。  示例:480.01.4430和480014430都是480-01-4430。

这是我到目前为止所提出的,但我无法理解为什么它不起作用

def format_ssns(string)
  ssn = string[/\d{9}/]
  ssn.gsub(/\d{9}/, /\d{3}-\d{2}-\d{4}/)
end

2 个答案:

答案 0 :(得分:6)

奇怪的是你没有得到异常:gsub的第二个参数必须是一个String(或者可以转换为String的东西),而不是正则表达式。

这是一个有效的例子:

ssn = '123456789'
ssn.gsub(/(\d{3})(\d{2})(\d{3})/, '\1-\2-\3')
# => "123-45-6789"

原始字符串中有三组数字。我们将每个组括在括号中。每对括号都会创建一个匹配组。在替换字符串中,我们使用\1包含第一个匹配组,\2包含第二个匹配组,\3包含第三个匹配组,并在它们之间加上破折号。< / p>

答案 1 :(得分:2)

如果您不关心字符串中的任何内容,而不是数字,您可以删除其他所有内容并根据需要进行格式化:

string.gsub(/\D/, '').gsub(/(\d{3})(\d{2})(\d{4})/, "\\1-\\2-\\3")