我试图获取一些数字,这些数字可能会或可能不会有分频器,并以标准格式返回它们.以SSN为例:
ex1="An example 123-45-6789"
ex2="123.45.6789 some more things"
ex3="123456789 thank you Ruby may I have another"
Run Code Online (Sandbox Code Playgroud)
应该进入一个返回"123-45-6789"的方法基本上,除了数字或字母之外的任何东西(包括任何东西)都应该返回XXX-XX-XXXX格式的SSN.难倒的部分是一种通过正则表达式来识别不存在任何东西的方法.
到目前为止我在识别我的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
Run Code Online (Sandbox Code Playgroud)
当没有任何东西时,它似乎适用于我所期望的一切."123456789"不起作用.在这种情况下,我可以使用正则表达式来识别缺少什么吗?
Dan*_*Tao 42
这已在评论中分享,但只是为了提供一个完整的答案......
您可以随意使用这些工具:
xx恰好匹配一次x{a,b}匹配x之间a和b时间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}/
Run Code Online (Sandbox Code Playgroud)
use*_*140 10
您是否尝试在数字之间匹配0或1个字符?
\d{3}[^0-9a-zA-Z]{0,1}\d{2}[^0-9a-zA-Z]{0,1}\d{4}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31092 次 |
| 最近记录: |