java - 正则表达式停止捕获重复的标签
问题描述
我在捕获基于标签(多个单词)之前和之后阅读的 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
解决方案
试试下面的正则表达式:
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-ddd
或dd-ddddddd
或dd.ddddddd
在这里测试。
推荐阅读
- laravel - Laravel 懒惰收集海量数据
- python - 为什么即使它不为空,我也会收到“ValueError:NaTType 不支持 strftime”?
- c# - 将 JSON 从 T 更改为 List
- typescript - 错误:不变量失败:您不应该在外部使用
(故事书) - mongodb - 编写包含“聚合”的 MongoDB 查询时 WSO2 出错
- javascript - 从 AJAX 返回结果
- facebook - RestFB - 如何使用 RestFB API 将帖子发布到不同用户的页面
- java - 通过 HTTP 请求发送 JSON,但响应为 NULL
- rest - SAP SSO 身份验证作为休息服务
- angular - Xtermjs 无法复制和粘贴