ruby - 如何使用正则表达式匹配字符或不匹配

标签 ruby regex

我正在尝试获取一组可能有或没有分隔符的数字,并以标准格式返回它们。以 SSN 为例:

ex1="An example 123-45-6789"
ex2="123.45.6789 some more things"
ex3="123456789 thank you Ruby may I have another"

都应该进入返回“123-45-6789”的方法 基本上,除数字或字母外的任何内容(包括任何内容)都应返回 XXX-XX-XXXX 格式的 SSN。 stumping 的部分是正则表达式识别不能有任何东西的方式。

到目前为止,我在识别我的 ssn 方面有什么:

def format_ssns(string)
  string.scan(/\d{3}[^0-9a-zA-Z]{1}\d{2}[^0-9a-zA-Z]{1}\d{4}/).to_a
end

它似乎对我期望的一切都有效,除了什么都没有的时候。 “123456789”不起作用。在这种情况下,我可以使用正则表达式来识别缺少什么吗?

最佳答案

这已经在评论中分享过,但只是为了提供一个完整的答案......

您可以使用这些工具:

  • x 匹配 x 恰好一次
  • x{a,b}ab 之间匹配 x
  • x{a,} 匹配 x 至少 a
  • x{,b} 匹配 x 最多(最多)b
  • x* 匹配 x 零次或多次(与 x{0,} 相同)
  • x+ 匹配 x 一次或多次(与 x{1,} 相同)
  • x? 匹配 x 零次或一次(与 x{0,1} 相同)

所以你想使用最后一个,因为它正是你要找的东西(零次或一次)。

/\d{3}[^0-9a-zA-Z]?\d{2}[^0-9a-zA-Z]?\d{4}/

关于ruby - 如何使用正则表达式匹配字符或不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079645/

相关文章:

ruby-on-rails - 如何阻止 faker gem 在 ruby​​ on rails 中失败的用户名唯一性验证?

ruby-on-rails - 为什么 ruby​​ 进程的 CPU 占用率为 100%

Ruby:比较两个时间对象的日期

javascript - 将字符串拆分成句子 - 忽略拆分的缩写

python - 使用 Regexp 过滤器的 Elasticsearch Bool 查询

regex - sed 插入行命令 OSX

ruby-on-rails - Rails4 - 如何在不裁剪的情况下压缩 Rails 应用程序中用户附加的图像?

regex - 检查 while 循环(shell)内的正则表达式条件

javascript - JS从字符串中删除带有 "new RegExp()"的非字母字符

ruby-on-rails - 我的应用程序的 coverband gem