我正在尝试获取一组可能有或没有分隔符的数字,并以标准格式返回它们。以 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}
在a
和b
之间匹配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/