僅當兩個分隔符都匹配時才需要匹配 ssn 編號。但下面的代碼匹配所有。
((?:\d[-.\s]*?){9})
輸入:
list of ssn are 222-33-4444, 333.77-8888 and 111 77.9998 and 111 22 3333 and 11-222222-9
預期輸出:
222-33-4444
111 22 3333
11-222222-9
uj5u.com熱心網友回復:
您可以捕獲第一個分隔符,然后使用反向參考來斷言第二個分隔符是相同的字符。由于格式在分隔符位置方面可以是可變的,因此您還需要斷言有 9 個數字和 2 個分隔符:
\b(?=[\d. -]{11}\b)\d{1,}([. -])\d{1,}\1\d{1,}\b
正則運算式 101 上的演示
如果 SSN 可能與單詞字符相鄰,\b則將不起作用(因為數字和單詞字符之間沒有單詞邊界)并且您將需要使用否定環視來斷言 SSN 之前或之后沒有其他數字:
(?<!\d)(?=[\d. -]{11}(?!\d))\d{1,}([. -])\d{1,}\1\d{1,}(?!\d)
正則運算式 101 上的演示
如果 SSN 可能沒有分隔符,您只需添加\d{9}(9 位數字)作為正則運算式的替代:
(?<!\d)(?:(?=[\d. -]{11}(?!\d))\d{1,}([. -])\d{1,}\1\d{1,}|\d{9})(?!\d)
正則運算式 101 上的演示
uj5u.com熱心網友回復:
無需代價高昂的前瞻或后瞻:
\d (\D)\d \1\d
由于您的問題已被標記爪哇:
ssn.length() == 11 && ssn.matches("\\d (\\D)\\d \\1\\d ")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/461248.html
上一篇:正則運算式查找不在短語中的數字
