【发布时间】:2013-12-05 02:10:56
【问题描述】:
我目前正在寻找在第 3 位和第 5 位之后用特定分隔符“-”分隔任何 9 位整数。即:
999999999 将是 999-99-9999
我可以使用正则表达式组匹配和 gsub 插入分隔符,但是我无法删除任何现有的分隔符并替换为所需的“-”,使用:
def format_ssns(string)
string.gsub(/(\d{3})(\d{2})(\d{4})/, '\1 -\2-\3')
结束
我发现了基本完全相同的问题here,这有助于强化思维模式的正确性。然而,即使使用完全相同的代码,如果使用“999.99.9999”调用该方法,它也不会用破折号替换现有的分隔符。
我应该使用不同的表达式来替换另一个吗(尽管在查看 here、here 和 --我有超过 2 个参考链接,但没有足够的声誉来发布它们-- 我很确定我应该使用 gsub)。
谢谢!
【问题讨论】:
-
分两步做没有错。使用一个正则表达式删除旧的分隔符或任何其他杂物,然后使用您显示的那个重新添加正确的分隔符。
-
我同意@Andy,只需在
string和.gsub....之间插入.gsub(/\D/,'')分两步进行即可简化测试。在一个真实的应用程序中(我假设这是一个练习),您可能想要检查字符串是否包含 9 个数字或 11 个字符,其中数字和非数字位于适当的位置。另外:您需要删除'\1 -\2-\3'中的空格。