首页 > 解决方案 > 正则表达式停止捕获重复的标签

问题描述

我在捕获基于标签(多个单词)之前和之后阅读的 SSN 时遇到问题。该字段是自由文本用户可以输入任何格式的 SSN。在下面的输入中,我有 2 种不同的格式 XXX-XXX-XXX 和 XX-XXXXXXX。

输入字符串:

Hi i'm John my SSN is 111-111-111, then my wife 222-222-222 might be SocialNumber and my daughter SSN :: 12.3456789 and son SSN will be 33-4444444 

标签: SSN,社交号码

正则表达式:

    String pattern = "(SSN|SocialNumber)([^\\d]*)(\\d{3}[.-]\\d{3}[.-]\\d{3})|"
                    +"(\\d{3}[.-]\\d{3}[.-]\\d{3})([^\\d]*)(SSN|SocialNumber) | " 
                    +"(SSN|SocialNumber)[^\\d]*(\\d{2}[.-]\\d{6})|"
                    + "(\\d{2}[.-]\\d{6})([^\\d]*(SSN|SocialNumber))";

代码输出:

SSN is 111-111-111
222-222-222 might be SocialNumber and my daughter SSN 
 SSN will be 33-444444

如果您看到上面的输出,它会根据标签(SSN|SocialNumber)正确地捕获约翰、他的妻子和儿子的 SSN,但错过了女儿的 SSN。请协助

预期输出:

SSN is 111-111-111
222-222-222 might be SocialNumber
SSN :: 12.3456789
SSN will be 33-4444444

标签: javaregex

解决方案


试试下面的正则表达式:

SSN is | is SocialNumber|\d{3}-\d{3}-\d{3}|\d{2}-\d{7}|\d{2}\.\d{7}
  • 我基本上采用了 2 个字符串:SSN is is SocialNumber.
  • 和 3 种格式:ddd-ddd-ddddd-ddddddddd.ddddddd

在这里测试。


推荐阅读